Может ли кто-нибудь объяснить мне шестнадцатеричные смещения?
-
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) в зависимости от вашего конечного значения.
Начать здесь.Как только вы научитесь считывать шестнадцатеричные значения, вы будете в гораздо лучшей форме для реального решения своей проблемы.