[GameMaker: Studio] int2hex, hex2int / 10進16進変換

gms_sample_hex_and_int_1

「これできないの?」シリーズ2回目は、10進16進変換です。

やっていることはとっても単純なので、今回は説明は省きます。
負数および小数は非対応です。

■使用例

show_debug_message("int2hex(auto) = " + ecl_script_string_int2hex(13579, 0)); show_debug_message("int2hex(len=6) = " + ecl_script_string_int2hex(13579, 6)); show_debug_message("hex2int = " + string(ecl_script_string_hex2int("350B"))); show_debug_message("hex2int = " + string(ecl_script_string_hex2int("00350B"))); show_debug_message("hex2int = " + string(ecl_script_string_hex2int("7F"))); show_debug_message("hex2int = " + string(ecl_script_string_hex2int("8000"))); show_debug_message("hex2int = " + string(ecl_script_string_hex2int("abcdef"))); // int2hex(auto) = 350B // int2hex(len=6) = 00350B // hex2int = 13579 // hex2int = 13579 // hex2int = 127 // hex2int = 32768 // hex2int = 11259375

■10進(real)→16進(string)
// ecl_script_string_int2hex // CConvert to hexadecimal(string) from integer(real). // Negative(less than 0) and decimal fraction can not be converted. var v = floor(argument0); // int var k = argument1; // output length (0=minimum) var n = "0123456789ABCDEF"; var b = 0; var l = 0; var s = ""; while(v > 0) { b = v & 15; s = string_char_at(n, b + 1) + s; l++; v = v >> 4; } if(l == 0) { s = "0"; l = 1; } if(k <= 0) return s; if(l < k) s = string_repeat("0", k - l) + s; return s;

■16進(string)→10進(real)
// ecl_script_string_hex2int // CConvert to integer(real) from hexadecimal(string). // Negative(less than 0) and decimal fraction can not be converted. var v = string_upper(argument0); var l = string_length(v); var n = "0123456789ABCDEF"; var b = 1; var c = 0; var p = 0; var r = 0; if(l <= 0) return "0"; for(p=l; p>0; p--) { c = string_pos(string_char_at(v, p), n); if(c > 0) c--; r += c * b; b = b << 4; } return r;