在 C 二进制文件中将 int 编码并组合为 32 位 int
Encode and combine int to 32bit int in C binary file
假设我有 2 个变量:
int var1 = 1; //1 byte
int var2 = 2; //1 byte
我想将这些组合起来并编码为 32 位无符号整数 (uint32_t)。通过组合它们,它将是 2 个字节。然后我用 2 个字节的 0 填充填充剩余的 space。这是写入文件,因此需要这种特定类型的编码。
所以结合上面的示例变量,我需要的输出是:
1200 //4 bytes
无需迂回地将 "combining" 值转换为 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
,本质上是 "a byte".
回读也很简单,例如使用fgetc()
读出两个值,当然还要检查是否失败。你也应该检查这些写入,我省略了它,因为错误处理。
假设我有 2 个变量:
int var1 = 1; //1 byte
int var2 = 2; //1 byte
我想将这些组合起来并编码为 32 位无符号整数 (uint32_t)。通过组合它们,它将是 2 个字节。然后我用 2 个字节的 0 填充填充剩余的 space。这是写入文件,因此需要这种特定类型的编码。
所以结合上面的示例变量,我需要的输出是:
1200 //4 bytes
无需迂回地将 "combining" 值转换为 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
,本质上是 "a byte".
回读也很简单,例如使用fgetc()
读出两个值,当然还要检查是否失败。你也应该检查这些写入,我省略了它,因为错误处理。