|
はじめましてつよきちさん、安久津といいます。
>と0が返ります。)が、16進数の文字列(例"0x64")に対して、16進数の数値(0x64)を
>返す、もしくは10進数の数値(100)を返す方法はないでしょうか?
これはどうでしょう?
$$hex = "0x64";
call valHex $$hex;
##num = ##return;
menu "$$hex = " + $$hex, "##num = " + str(##num), "&N 了解";
endmacro;
/////////
// val とは異なり、16進表記の文字列を数値に変換する。
valHex:
$$hex = $$1;
if( leftstr( $$hex, 2 ) == "0x" ) $$hex = midstr($$hex, 2, strlen($$hex)-2 );
##highBit = 0;
##iend = strlen( $$hex );
if( ##iend > 7 ){
$$hex = rightstr( $$hex, 8 );
$$tmp = leftstr( $$hex, 1 );
$$hex = midstr( $$hex, 1, 7 );
##iend = 7;
##highBit = 1;
}
##A = 65; ##value = 0;
##i = 0;
while( ##i < ##iend ){
$$ch = midstr( $$hex, ##i, 1 );
##ch = ascii( $$ch );
if( ##ch > 47 && ##ch < 58 ){ // 数字
##num = val( $$ch );
}else{
if( ##ch > 96 && ##ch < 123 ) ##ch = ##ch - 32;
##num = 10 + ##ch - ##A;
}
##value = ##value * 16 + ##num;
##i = ##i + 1;
}
if( ##highBit ){
##code = ascii( $$tmp );
if( ##code > 47 && ##code < 58 ){
##num = val( $$tmp );
}else{
if( ##code > 96 && ##code < 123 ) ##code = ##code - 32;
##num = 10 + ##code - ##A;
}
// 0 <= ##num <= 15
##minus = 0;
if( ##num & 0x08 ) ##minus = 0x80000000;
##num = (##num & 0x07) * 0x10000000;
##value = ##minus | ##num | ##value;
}
return ##value;
// end of valHex
//////////
ではでは。
#メールだと投稿しやすいです。(^^)
|
|