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


HSPTV!掲示板


未解決 解決 停止 削除要請

2006
1223
かずみバイナリデータのbloadでの部分読み込みについて4解決


かずみ

リンク

2006/12/23(Sat) 00:08:51|NO.4338

申し訳ありませんが、何卒宜しくお願いします。

元のバイナリデータがかなり大きいので、一度に読み込まずに、
bloadで必要な部分だけを読み込もうとして試してみたのですが、
試した結果が上手くいきません。

ファイル内に入っているバイナリデータ(バイナリエディタで確認
してみました)は「0x0320」です。試しために作成したスクリプトは
----------------------
bload "001.dat",i,2,18

mes strf("10進[%d]",i)
mes strf("16進[%x]",i)
----------------------
です。実行結果が「8195」「0x2003」となってしまい。
「0x20」と「0x03」がひっくりかえってしまっているようなのですが、
bloadの使い方とか確認のしかたに問題があるかどうかを教えていただけないでしょうか

申し訳ありませんが、何卒宜しくお願いします。



この記事に返信する


Kpan

リンク

2006/12/23(Sat) 00:25:47|NO.4339

> バイナリデータ(バイナリエディタで確認
> してみました)は「0x0320」

バイナリエディタの見方を勘違いしている?

格納されている数値は「0x2003」が正しいかと思います。
http://lhsp.s206.xrea.com/hsp_file.html#1



As

リンク

2006/12/23(Sat) 00:25:53|NO.4340

bloadでバイナリデータを読み込む際に気をつけなければいけないことは、
bloadで読み込むサイズを予めsdim命令で開けておく必要があります。

これが原因ではないでしょうか?



naznyark

リンク

2006/12/23(Sat) 02:38:44|NO.4343

 メモリ上に 0x03, 0x20, 0xmm, 0xnn の順に置かれているデータをリトルエンディアン環境で数値にした場合、
バイトごとの順序がいれかえられて 0xnnmm2003 という値になります。

 バイトごとの並び順を確認する場合はその点に注意して結果を見るか、
peek関数で1バイトずつ読み出して確認します。
(デバッグ時ならデバッグウィンドウのメモリダンプでも確認できます。)



かずみ

リンク

2006/12/23(Sat) 13:03:29|NO.4349

早い回答で本当に有難うございました。とにかく回答を元に色々と試した結果
取りあえずは問題は解決することが出来ました。有難うございました。

下は解決方法の報告です。

まずファイル内に入ってるデータの中身は全てわかっているものを使ったので、
バイナリエディタの見方では無いと思いますが、やはり見間違い等もあると思い
再確認したのですが見方は間違いは無いようでした。

リトルエンディアン環境と言うものを知らなかったので、色々調べてみましたが、
私の頭では結局、格納時にひっくり返る程度しか理解できませんでした。
やはり、頭の悪さは小さな確認で補うしかと思いまして、
とにかくsdimを使用してpeekで1バイトづつ確認したところ、ファイルの順番通りに
読み出していることは確認できました。

そこでメモリー上だけのことかと思い
---------------------------
bload "001.dat",i,2,18
i++
mes i
mes strf("10進[%d]",i)
mes strf("16進[%x]",i)
---------------------------
として試したのですが、結果は「8196」「0x2004」とひっくり返った値に
1足された結果になってしまいましたので、
---------------------------
sdim ii,2
bload "001.dat",ii,2,18
i_1=peek(ii,0)
i=i_1
i<<8
i_1=peek(ii,1)
i|i_1
i++
mes i
mes strf("10進[%d]",i)
mes strf("16進[%x]",i)
---------------------------
として確認したところ「801」「0x321」と、入っているはずの値に
ちゃんと1足された値になりました。
とりあえず、この方法を使用しようと思います。

気になって同じファイルで2文字以上並んで文字の入っている部分で確認してみると
sdimを使用して2バイト読み込んで表示するとちゃんと入っている文字の順で
表示されて、質問したような単純な数値として試すとひっくり返った値になりました。
どうも私の頭では納得できないのですが「こういうものだ」と思うことにします。

本当に有難うございました。



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