例えば
tx="120339209102910293839182"
を変換するとして、どうしても
商を16で割り続ける方法だと、32bit 超えてしまうため、計算ができません。
出来れば変換する桁の限界を無くしたいと思っています。
一応作成中のモジュールも載せておきます。
#module // 文字列を 指定したサイズのバッファに変換します。 // StrToBuf rt,"$00112233",2 を変換した場合 // rt の中身は // 33 22 // の 2byte に成る #deffunc StrToBuf var buf_ , str tx_ , int size_,local i_ , local count_ , local v_ _tmp=tx_ // 先頭のキャラクター c = peek(_tmp) is_16 = (c=='$') // 16 進数 eof ~ top is_2 = (c=='%') // 2 進数 eof ~ top is_b = (c=='#') // 16 進数 バイナリ top ~ eof if(is_16 or is_2 or is_b){ _tmp=strmid(_tmp,1,0x7FFFFFFF) } _len=strlen(_tmp) memexpand buf_,size_ memset buf_,0,size_ if(is_16){_proc = *for16:gosub *create // 16 進数 }else:if(is_2){_proc = *for2:gosub *create // 2 進数 }else:if(is_b){_proc = *forbin:gosub *create// binary }else{ // 取りあえず32bit制限に妥協中 _tmp = strf("%x",limit(int(_tmp),0x80000000,0x7fffffff)) _len = strlen(_tmp) _proc = *for16:gosub *create } return *create repeat _len gosub _proc if(stat):poke buf_,count_,v_:v_=0:count_++ if(count_==size_):break loop if(v_!=0 and count_<size_):poke buf_,count_,v_ return *for16 v_ |= int("$"+strmid(_tmp,(_len-1)-cnt,1))<<((cnt\2)*4) return (cnt\2)==1 *for2 v_ |= (peek(_tmp,(_len-1)-cnt)=='1')<<(cnt\8) return (cnt\8)==7 *forbin v_ |= int("$"+strmid(_tmp,cnt,1))<<((cnt\2)*4) return (cnt\2)==1 #global tx="120339209102910293839182" sdim rt StrToBuf rt,tx,2 dupptr rti,varptr(rt),2 mes strf("%d",rti)