С Новым годом! Форум программистов, компьютерный форум, киберфорум
Теория и практика программирования
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
15 / 14 / 9
Регистрация: 16.04.2012
Сообщений: 1,073
1

Шестнадцатиричные числа

25.07.2022, 16:12. Показов 793. Ответов 5
Метки hex (Все метки)

Author24 — интернет-сервис помощи студентам
Извините, но вопрос не по программированию Просто более подходящего раздела где его можно разместить я не нашёл, а программисты уж наверняка знакомы с шестнадцатиричными вычислениями
В общем, читал мануал, забуксовал на моменте
We open bad.7z in hex editor

0000000000: 37 7A BC AF 27 1C 00 04 5B 38 BE F9 59 0E 00 00
0000000010: 00 00 00 00 23 00 00 00 00 00 00 00 7A 63 68 FD
0000000020: 00 21 16 89 6C 71 3D AB 7D 89 E6 3C 2E BE 60 24
We see that Start Header is OK.

We calculate correct archive size from Start Header fields values:

0x0E59 + 0x20 + 0x23 = 0x0E9C = 3740
Объясните непросвещённому, где и каким образом в первых трёх строках hex'а спрятались значения 0x0E59, 0x20 и 0x23?

Если я правильно понял то что было написано в начале мануала
00: 6 bytes: 37 7A BC AF 27 1C - Signature
06: 2 bytes: 00 04 - Format version
08: 4 bytes: 5B 38 BE F9 - CRC of the following 20 bytes
0C: 8 bytes: 59 0E 00 00 00 00 00 00 - relative offset of End Header
14: 8 bytes: 23 00 00 00 00 00 00 00 - the length of End Header
1C: 4 bytes: 7A 63 68 FD - CRC of the End Header
, нужный мне размер файла должен начинаться с 12 байта... но ни там, ни в других местах, я совпадений не нашёл И откуда вообще взялся четырёхзначный 0x0E59 если все исходные значения двухзначные?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.07.2022, 16:12
Ответы с готовыми решениями:

Переводчик из десятичных в шестнадцатиричные числа
Почему некорректно выводятся латинские символы ?? #include <stdio.h> #include <stdlib.h> ...

Перевод из C++ в Delphi - шестнадцатиричные числа
Помогите, пожалуйста, грамотно написать эти две функции на Delphi (функции из Healpix) static...

Программа складывающая десятиричные и шестнадцатиричные числа
Пожалуюста помогите написать программу сложения десятичного и шестнадцатиричного числа . Кто может...

Нужна прога, переводящая двоичные записи числел в шестнадцатиричные. Числа заданы в файле в столбик. Пожалуйста, зависет зачёт от этого!
Нужно дописать прогу или предложить свой вариант реализации (язык программы не важен), чтобы...

5
673 / 547 / 74
Регистрация: 20.09.2014
Сообщений: 3,560
26.07.2022, 08:51 2
Лучший ответ Сообщение было отмечено ChildOfFlowers как решение

Решение

Так вот же начальный адрес и длина энд-хедера:
Цитата Сообщение от ChildOfFlowers Посмотреть сообщение
0C: 8 bytes: 59 0E 00 00 00 00 00 00 - relative offset of End Header
14: 8 bytes: 23 00 00 00 00 00 00 00 - the length of End Header
Байты 0x0E59 только идут задом наперед.

После энд-хедера идут еще какие-то 16 байт (0x20) - metadata или ссылка на metadata, скорее всего, судя по мануалу.
1
15 / 14 / 9
Регистрация: 16.04.2012
Сообщений: 1,073
26.07.2022, 12:50  [ТС] 3
Цитата Сообщение от Mikhaylo Посмотреть сообщение
еще какие-то 16 байт (0x20)
А почему 16 байт? Конвертор говорит, что 0x20 = 32 в десятичной системе
0
673 / 547 / 74
Регистрация: 20.09.2014
Сообщений: 3,560
26.07.2022, 13:13 4
Аа, ну значит, 32 байта - это старт-хедер, 35 байт - энд-хедер.
0
15 / 14 / 9
Регистрация: 16.04.2012
Сообщений: 1,073
28.07.2022, 13:52  [ТС] 5
Цитата Сообщение от Mikhaylo Посмотреть сообщение
Байты 0x0E59 только идут задом наперед
А это нормально для таких записей? Допустим, если я буду пытаться в другой шестнадцатиричной записи что-нибудь найти, мне всегда надо с заду-наперёд читать?
0
673 / 547 / 74
Регистрация: 20.09.2014
Сообщений: 3,560
28.07.2022, 14:14 6
Это нормально. Это называется борьбой остроконечников и тупоконечников в IT (big endian / little endian), загугли. Одни производители микропроцессоров решили, что старший байт в слове должен идти первым, а другие сказали, что более красиво, когда младший байт первый. Каждый из производителей разработал микропроцессор, который по-разному дергает слова из оперативной памяти. Это как бы похрен, но проблема возникает в кроссплатформенных вещах, когда процессор из лагеря остроконечников получил данные от процессора лагеря тупоконечников. В этом случае надо делать byte_swap перед обработкой данных, т.е. просто развернуть порядок байт. Например, последовательность 00-0A-01-3B превратить в 0A-00-3B-01 или вовсе 3B-01-0A-00 (byte-swap для двойного слова).
Для математики и для обычных людей удобнее всего тупо-конечный вариант (big endian) - сначала старший байт, затем младший. Потому что запись числа арабскими цифрами также начинается со старшего разряда.

Добавлено через 6 минут
https://ru.m.wikipedia.org/wik... 0%BE%D0%B2
0
28.07.2022, 14:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.07.2022, 14:14
Помогаю со студенческими работами здесь

Реализовать класс "Шестнадцатиричные числа"
Задание собственно говоря такое: 1. Создать программный класс (или несколько связанных классов) ...

С++ и шестнадцатиричные вставки
не раз встречал в примерах С++ встречал вставки по типу 0x... очень бы хотелось этим научиться...

Шестнадцатиричные коды констант
Очень часто при работе с реестром и API функциями можно встретить подобное объявление констант:...

восьмеричные и шестнадцатиричные цифры
Всем доброго времени суток. Извиняюсь, что может быть с таким глупым вопросом, но если кому не...

Android клавиатура только шестнадцатиричные символы
Всем привет! Хочу при нажатии кнопки, открывалось окно, где в поле ввода можно вводить с...

Заменить в строке все символьные константы вида ‘A’ на соответствующие шестнадцатиричные (т.е. ‘А’ на 0х41)
Помогите написать код на классическом Си - Заменить в строке все символьные константы вида ‘A’ на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru