Hex это просто представление числа. Интерпретируете ли вы число как двоичное, десятичное, шестнадцатеричное, восьмеричное и т. Д., Зависит только от вас. В C ++ поддерживается десятичное, шестнадцатеричное и восьмеричное представления, но все они хранятся одинаково.
Пример:
int x = 0x1;
int y = 1;
assert(x == y);
Вероятно, формат файла требует, чтобы вы хранили файлы в обычном двоичном формате. Я не думаю, что формат файла хочет, чтобы шестнадцатеричные числа были читаемой текстовой строкой. Если это так, то вы можете использовать std :: hex, чтобы сделать преобразование для вас. (Пример: file << hex << number;
)
Если формат файла говорит о записи в файл более 1 байта, то будьте осторожны с Endianness вашей архитектуры. Это означает, что вы сохраняете самый старший байт многобайтового типа первым или последним.
Очень часто в спецификациях формата файла показано, как двоичный файл должен выглядеть для данной части файла. Не путайте это с фактическим хранением двоичных цифр в виде строк. Точно так же они иногда дают ярлык для этого, указывая в шестнадцатеричном виде, как это должно выглядеть. Опять же, большую часть времени они на самом деле не означают текстовые строки.
Наименьшая адресуемая единица в C ++ - это char
, что составляет 1 байт. Если вы хотите установить биты внутри этого байта, вам нужно использовать побитовые операторы, такие как &
и |
. Есть много руководств по побитовым операторам, поэтому я не буду вдаваться в подробности.