web-dev-qa-db-ja.com

誰かが16進オフセットを私に説明できますか?

Hex Workshopをダウンロードしましたが、.dbcファイルを読むように言われました。

オフセット0x04と0x05を読み取る場合、28,315が含まれているはずです

これを行う方法がわかりませんか? 0x04の意味?

21
user20256

0x04は4の16進数です(0xは数値の16進数表現の一般的な接頭表記規則です-多くの人々は10進数で考えるので)、それは4番目のバイトになります(オフセットと言っているため、おそらく最初のバイトをバイト0なので、オフセット0x04が5番目のバイトになります)。

彼らは4番目と5番目のバイトを一緒にすると28315になると言っていると思いますが、これがリトルエンディアンかビッグエンディアンかを言っていましたか?

28315(10進数)は16進数表記の0x6E9Bであり、リトルエンディアンの場合はファイル内で0x9B 0x6Eの順になっている可能性があります。

注:リトルエンディアンとビッグエンディアンは、バイトが書き込まれる順序を指します。人間は通常、10進表記と16進表記をビッグエンディアンで記述します。

256は0x0100として書き込まれます(左側の数字が最大のスケールです)

しかし、これには2バイトかかり、リトルエンディアンシステムは最初に下位バイト0x00 0x01を書き込みます。ビッグエンディアンシステムは、最初に上位バイトを書き込みます:0x01 0x00。

通常、Intelシステムはリトルエンディアンであり、他のシステムは異なります。

12
Cade Roux

バイナリファイルをバイトの線形配列と考えてください。

0x04は配列の5番目の要素(0ベースの配列)であり、0x05は6番目の要素です。

0x04と0x05の2つの値をOR演算して、28,315を作成できます。

読み取っている値は16ビットであるため、1つの値をビットシフトしてからOR=それらを一緒に、つまり、c#でファイルを操作している場合は、次のように使用します。

int value = (ByteArray[4] >> 8) | ByteArray[5]);

うまくいけば、これは16進アドレスがどのように機能するかを説明するのに役立ちます。

3
FlySwat

それはあなたの見ている4番目と5番目のXXコードです...

 1 2 3 4 5 6 
 01 AB 11 7B FF 5A 

したがって、0x04と0x05は「7B」と「FF」です。

あなたが言っていることを仮定すると、あなたのケースでは7BFFはあなたの望む値と等しくなければなりません。

HTH

2
vIceBerg

16進数の0x04は10進数の4です。 16進数の0x10は10進数で16です。 calc.exeは16進数と10進数を変換できます。

オフセット4は、ファイルの先頭から4バイトを意味します。オフセット0はファイルの最初のバイトです。

1
John Millikin

バイト4と5を見てください。エンディアンに応じて、値は0x6E 0x9B(または0x9B 0x6E)になるはずです。

開始 ここ 。 16進数の値を読み取る方法を習得すると、実際に問題を解決するためのはるかに優れた状態になります。

0
Mark Bessey