Может кто-нибудь объяснить мне шестнадцатеричные смещения? - PullRequest
21 голосов
/ 26 сентября 2008

Я скачал Hex Workshop, и мне сказали прочитать файл .dbc.

Он должен содержать 28 315, если вы читаете смещение 0x04 и 0x05

Я не уверен, как это сделать? Что означает 0x04?

Ответы [ 6 ]

11 голосов
/ 26 сентября 2008

0x04 - это шестнадцатеричное для 4 (0x - это обычное префиксное соглашение для представления чисел в базе 16 - поскольку многие люди думают в десятичном виде), и это будет четвертый байт (так как они говорят смещение, они, вероятно, считают первый байт как байт 0, поэтому смещение 0x04 будет 5-м байтом).

Полагаю, они говорят, что 4-й и 5-й байты вместе будут 28315, но они сказали, является ли это прямым или старшим порядком байтов?

28315 (десятичное число) - 0x6E9B в шестнадцатеричном формате, вероятно, в файле в порядке 0x9B 0x6E, если он имеет младший порядок.

Примечание. Байт с прямым порядком байтов и байты с прямым порядком байтов относятся к порядку байтов. Люди типично записывают десятичную запись и шестнадцатеричное в порядке байтов, поэтому:

256 будет записано как 0x0100 (цифры слева - самый большой масштаб)

Но для этого нужно два байта, и системы с прямым порядком байтов сначала запишут младший байт: 0x00 0x01. Системы с прямым порядком байтов сначала пишут старший байт: 0x01 0x00.

Обычно системы Intel имеют младший порядок, а другие системы различаются.

3 голосов
/ 26 сентября 2008

Думайте о двоичном файле как о линейном массиве байтов.

0x04 будет 5-м (в массиве на основе 0) элементом массива, а 0x05 будет 6-м.

Два значения в 0x04 и 0x05 можно объединить или объединить, чтобы создать число 28 315.

Так как значение, которое вы читаете, является 16-битным, вам нужно сдвинуть бит на одно значение, а затем ИЛИ вместе, т. Е. Если бы вы манипулировали файлом в c #, вы бы использовали что-то вроде этого:

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

Надеюсь, это поможет объяснить, как работают шестнадцатеричные адреса.

2 голосов
/ 26 сентября 2008

Это 4-й и 5-й XX код вашего просмотра ...

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

Итак, 0x04 и 0x05 - это "7B" и "FF".

Предполагая, что вы говорите, в вашем случае 7BFF должно быть равно желаемому значению.

НТН

1 голос
/ 26 сентября 2008

Посмотрите на байты 4 и 5, они должны иметь значения 0x6E 0x9B (или 0x9B 0x6E) в зависимости от вашего порядка байтов.

1 голос
/ 26 сентября 2008

0x04 в шестнадцатеричном виде - это 4 в десятичном виде. 0x10 в шестнадцатеричном виде - 16 в десятичном. calc.exe может конвертировать между вами в шестнадцатеричное и десятичное число.

Смещение 4 означает 4 байта от начала файла. Смещение 0 - это первый байт в файле.

0 голосов
/ 26 сентября 2008

Старт здесь . Как только вы научитесь читать шестнадцатеричные значения, вы будете в гораздо лучшей форме, чтобы действительно решить вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...