Кодировать и объединять int в 32-битный int в двоичном файле C

Допустим, у меня есть 2 переменные:

int var1 = 1; //1 byte
int var2 = 2; //1 byte

Я хочу объединить их и кодировать как 32-разрядное целое число без знака (uint32_t). Объединяя их, мы получим 2 байта. Затем я бы заполнил оставшееся пространство 2 байтами заполнения 0. Это для записи в файл, отсюда и необходимость в этом конкретном типе кодирования.

Таким образом, объединяя приведенные выше примеры переменных, мне нужен следующий вывод:

1200 //4 bytes

1 ответ

Решение

Там нет необходимости идти окольным путем "объединения" значений в uint32_t, Бинарные файлы представляют собой потоки байтов, поэтому запись отдельных байтов очень возможна:

FILE * const out = fopen("myfile.bin", "wb");
const int val1 = 1;
const int val2 = 2;
if(out != NULL)
{
  fputc(val1, out);
  fputc(val2, out);
  // Pad the file to four bytes, as originally requested. Not needed, though.
  fputc(0, out);
  fputc(0, out);
  fclose(out);
}

Это использует fputc() записать отдельные байты в файл. Для записи значения требуется целочисленный аргумент, но он обрабатывается как unsigned char внутренне, что по сути является "байтом".

Чтение обратно будет таким же простым, например, с помощью fgetc() считывать два значения и, конечно, проверять наличие ошибок. Вы должны проверить эти записи тоже, я пропустил, потому что обработка ошибок.

Другие вопросы по тегам