HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2022
0910
SMOPUbloadで読み込んだファイルを16進数化したい8解決


SMOPU

リンク

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



この記事に返信する


SMOPU

リンク

2022/9/10(Sat) 15:36:21|NO.97112

実行して、今気づいたのですが、

--------------------------- Error --------------------------- #Error 3 in line 7 (hex.hsp) -->パラメータの値が異常です --------------------------- OK ---------------------------
というエラーが出ます。
デバッグウィンドウで確認してみたところ、hexdata変数の内容は途中まで正しく出力されるようなので、どこを修正したらいいのか教えてもらえれば幸いです。



X

リンク

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

これでどうでしょうか



SMOPU

リンク

2022/9/10(Sat) 15:56:55|NO.97114

>NO.97113
>これでどうでしょうか
やってみましたが、フリーズしてしまいます。



X

リンク

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



SMOPU

リンク

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まで取得したいのですが、できないのでしょうか?



MillkeyStars

リンク

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



SMOPU

リンク

2022/9/14(Wed) 21:09:13|NO.97131

>NO.97125
おお、ありがとうございます!
このスクリプトを参考にしてもらいます!
皆さん、回答ありがとうございました!



ONION software Copyright 1997-2023(c) All rights reserved.