Вопрос

В настоящее время я пытаюсь выучить еще немного подробностей форматов файлов.

У меня есть спецификация для формата 3D -файла (в этом случае U3D), и я хочу попытаться реализовать это. Ничего серьезного, только для учебного эффекта.

Моя проблема начинается очень рано с типов, которые необходимо определить. Я должен определить различные целые числа (8 -битные, 16 -битные, 32 -битные без знака и подписаны), и они должны быть преобразованы в HEX, прежде чем записать его в файл.

Как я могу определить эти типы, так как я не могу просто создать IE IE IE? Другая проблема для меня заключается в том, как преобразовать, что i16 в шестнадцатеричный номер с 8 цифр (т.е. 0001 0001).

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

Решение

HEX - это просто представление числа. Интерпретируете ли вы число как бинарный, десятичный, гекс, восьмиугольный и т. Д. В C ++ вы поддерживаете десятичные, шестигранные и восьмиугольные представления, но все они хранятся одинаково.

Пример:

int x = 0x1;
int y = 1;
assert(x == y);

Вероятно, формат файла хочет, чтобы вы сохранили файлы в обычном двоичном формате. Я не думаю, что формат файла хочет, чтобы HEX -номера как читаемая текстовая строка. Если это произойдет, тогда вы можете использовать STD :: HEX, чтобы сделать конверсию для вас. (Пример: file << hex << number;)

Если в формате файла говорится о написании более 1 -байтового типа для файла, то будьте осторожны с Эндсианство вашей архитектуры. Это означает, что вы храните наиболее значимый байт мультибайтного типа первым или последним.

Очень часто в спецификациях формата файла, чтобы показать вам, как двоичный файл должен искать данную часть файла. Не путайте это, хотя фактически хранит бинарные цифры в виде струн. Точно так же они иногда дают ярлык для этого, указав в Hex, как это должно выглядеть. Опять же, большую часть времени они на самом деле не имеют в виду текстовые строки.

Наименьший адресуемый блок в C ++ - это char который составляет 1 байт. Если вы хотите установить биты в этом байте, вам нужно использовать бить операторов, как & а также |. Анкет Есть много учебников по битовым операторам, поэтому я не буду вдаваться в подробности здесь.

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

Если вы включите <stdint.h> Вы получите такие типы, как:

uint8_t
int16_t
uint32_t

Во -первых, позвольте мне понять. Целые числа хранятся в виде текста в файле, в шестнадцатеричном формате, без префикса 0x?

Затем используйте этот синтаксис:

fprintf (fp, "%08x", номер);

Написать 0ABC1234 в файл.

Что касается «определения различных целых чисел (8 -битный, 16 -битный, 32 -битный без знака и подписанный)», если вы не бросаете свои собственные, и сопутствующие математические операции для них, вы должны придерживаться типов, поставляемых вашей системой. См. Stdint.h для доступных Typedefs, таких как int32_t.

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