Кодировать и объединять 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()
считывать два значения и, конечно, проверять наличие ошибок. Вы должны проверить эти записи тоже, я пропустил, потому что обработка ошибок.