Как рассчитать шестнадцатеричные смещения в файле

#binary #hex #byte #offset #hexdump

#двоичный #шестнадцатеричный #байт #смещение #шестнадцатеричный дамп

Вопрос:

Как мне вычислить расположение байтов шестнадцатеричного смещения 326a f338 (младший порядковый номер) в файле. Изо всех сил пытаюсь понять, как это вычисляется. Шаги, которые я пробовал, были:

  1. Преобразовать в строчный порядковый номер: 833f a623
  2. Преобразуйте 833f и a623 в десятичное число: 833f = 33599 и a623 = 42531
  3. Вычтите 2 значения: 42531 — 33599 = 8 932

В соответствии с этим вычислением расположение шестнадцатеричного смещения 326a f338 будет равняться 8 932 байтам файла. Это не работает, потому что в файле не так много байтов. Может кто-нибудь объяснить мне, какая часть моих вычислений неверна?

Комментарии:

1. При преобразовании между большим и маленьким порядковым номером байты, которые составляют по два битбла каждый, а не битблы, меняются местами. Один бит = 4 бита, один байт = 8 бит. Таким образом, младшая конечная версия будет 38 f3 6a 32. Это 955476530 в десятичной системе счисления, что означает, что размер файла составляет почти гигабайт. Учитывая, что вы говорите, что размер файла меньше 8 КБ, вы, вероятно, захотите предоставить больше информации (например, откуда вы знаете, что полученное вами шестнадцатеричное смещение действительно?)

Ответ №1:

Вы неправильно конвертируете из младшего в старший. Если у вас есть 4 байта в младшем конце, которые равны 326af338, то ваше представление в большом конце равно 38f36a32.

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

Преобразование из одного представления в другое на бумаге требует «чтения» байтов в противоположном направлении. Байт в шестнадцатеричном представлении состоит из 2 цифр, поэтому вы считываете свое шестнадцатеричное число с младшим порядком в обратном направлении на 2 цифры за раз, чтобы получить шестнадцатеричное число с большим порядком.

Итак, ваше смещение равно 0x38f36a32 в базе 16, которая имеет десятичное представление в базе 10 955476530.

Чтение из файла / потока и чтение с этим смещением будет зависеть от вашей библиотеки ввода-вывода.

Комментарии:

1. Спасибо за помощь mipnw и Россу Джейкобсу. Вы оба были правы, я неправильно преобразовывал в конец строки, что давало мне неправильные результаты.