|
|
2022/9/10(Sat) 15:09:09|NO.97111
bloadで読み込んだファイルを16進数化したい
bloadで読み込んだファイルを16進数化させたいのですが、どうやってもフリーズしてしまいます。
ちなみにファイルのサイズは16KBです。
いくらググっても全く見つからなかったので、どこを修正したらいいのか、ご教授いただければ幸いです。
http://tomeko.net/online_tools/file_to_hex.php
↑このサイトみたいな感じで、16進数に変換させたいです。
exist "disk.img"
fs=strsize
bload "disk.img",hex,fs
sdim hexdata,4096
repeat fs
hexdata += strf("%02x,",peek(hex,cnt))
loop
mesbox hexdata,640,480
|
|
2022/9/10(Sat) 15:36:21|NO.97112
実行して、今気づいたのですが、
---------------------------
Error
---------------------------
#Error 3 in line 7 (hex.hsp)
-->パラメータの値が異常です
---------------------------
OK
---------------------------
というエラーが出ます。
デバッグウィンドウで確認してみたところ、hexdata変数の内容は途中まで正しく出力されるようなので、どこを修正したらいいのか教えてもらえれば幸いです。
|
|
2022/9/10(Sat) 15:50:14|NO.97113
exist "disk.img"
fs=strsize
sdim hex, fs//←追加
bload "disk.img",hex,fs
sdim hexdata,4096
repeat fs
hexdata += strf("0x%02x,",peek(hex,cnt))
loop
mesbox hexdata,640,480
これでどうでしょうか
|
|
2022/9/10(Sat) 15:56:55|NO.97114
>NO.97113
>これでどうでしょうか
やってみましたが、フリーズしてしまいます。
|
|
2022/9/10(Sat) 17:31:04|NO.97116
手元の適当な同じようなサイズのファイルでは問題なかったのですが、
disk.imgというファイルがどのようなものかわからないので条件が違うのかもしれないですね。
noteloadで試してみるとかはダメでしょうか。
notesel hex
noteload "disk.img"
fs = notesize
noteunsel
sdim hexdata, 4096
repeat fs
hexdata += strf("0x%02x,",peek(hex,cnt))
loop
mesbox hexdata,640,480
|
|
2022/9/10(Sat) 17:41:15|NO.97117
>NO.97116
いや違います。
exist "disk.img"
fs=strsize
sdim hex, fs//←追加
bload "disk.img",hex,fs
sdim hexdata,4096
repeat fs/128
hexdata += strf("0x%02x,",peek(hex,cnt))
loop
mesbox hexdata,640,480
repeat fs/128 に変えたら問題なく取得できたのですが、この方法だと正確なバイト数が取得できません。
disk.imgをバイナリエディターで確認してみたところ、末尾に0xAAがありました。
本当は0xAAまで取得したいのですが、できないのでしょうか?
|
|
2022/9/10(Sat) 20:02:40|NO.97119
変換先の hexdata のメモリ確保サイズが不足している。
fs (disk.img) の 16KB データに対して変換先の必要なメモリは 16KB * 5文字 + 終端 1文字の 81921 バイトが必要であるが、4096 バイトしか確保していない
exist "disk.img"
fs=strsize
sdim hex, fs
bload "disk.img",hex,fs
sdim hexdata,(fs * 5) + 1 // 5 = "0x" + "??" + ","
repeat fs
hexdata += strf("0x%02x,",peek(hex,cnt))
loop
mesbox hexdata,640,480
|
|
2022/9/12(Mon) 19:24:48|NO.97125
どうぞ。
// ファイルを開く
dialog "img",16
if stat=0 { end } // キャンセル
path=refstr
// ファイルを確認
exist path
fs=strsize // ファイルサイズ取得
sdim hex,fs // ファイルサイズ分のバッファを確保
bload path,hex,fs // ファイルをロード
// 16進数文字列を生成
mes "処理中..."
sdim textdata,fs*3 // 文字列用バッファを確保
repeat fs
textdata+=strf("%02X ",peek(hex,cnt))
if cnt\16=15 { textdata+="\n" } // 1行16要素で改行
wait 0
loop
// 表示
font "MS ゴシック",18
objmode 2
pos 0,0: mesbox textdata,640,480
|
|
2022/9/14(Wed) 21:09:13|NO.97131
>NO.97125
おお、ありがとうございます!
このスクリプトを参考にしてもらいます!
皆さん、回答ありがとうございました!
|
|