Может ли кто-нибудь объяснить мне шестнадцатеричные смещения?

StackOverflow https://stackoverflow.com/questions/141262

  •  02-07-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

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

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

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

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

Другие советы

Представьте себе двоичный файл как линейный массив байтов.

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

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

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

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

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

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

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

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

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

HTH

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top