在C语言中,以二进制形式存储数据到文件主要通过以下两种方式实现:
一、使用文件I/O函数(推荐)
使用`fopen`函数以二进制写入模式(`"wb"`)打开文件。 ```c
FILE *fp = fopen("filename.bin", "wb");
if (fp == NULL) {
perror("Failed to open file");
return 1;
}
```
写入数据
使用`fwrite`函数将数据写入文件。需传递数据指针、数据类型大小及元素个数。 ```c
int array;
// 假设已填充数组数据
fwrite(array, sizeof(int), 100, fp);
```
关闭文件
使用`fclose`函数关闭文件以完成写入操作。 ```c
fclose(fp);
```
示例代码:
将整数数组以二进制形式存储到文件
```c
include
int main() {
int array = {1, 2, 3, 4, 5}; // 示例数据
FILE *fp = fopen("int_array.bin", "wb");
if (fp == NULL) {
perror("Failed to open file");
return 1;
}
fwrite(array, sizeof(int), sizeof(array)/sizeof(array), fp);
fclose(fp);
return 0;
}
```
二、使用位操作符或结构体(高级用法)
可以通过按位与、或、异或等操作符直接操作二进制位。例如,设置某个整数的第n位为1:
```c
unsigned int num = 0;
num |= (1 << n); // 将第n位设为1
fwrite(&num, sizeof(unsigned int), 1, fp);
```
位域结构体
使用位域可高效存储固定位数的数据。例如,定义一个结构体存储3个8位标志:
```c
struct Flags {
unsigned int flag1 : 1; // 1位
unsigned int flag2 : 1; // 1位
unsigned int flag3 : 5; // 5位
};
Flags flags = {0b10101100};
fwrite(&flags, sizeof(Flags), 1, fp);
```
注意事项
数据对齐:
不同系统可能采用大端或小端存储模式,使用`pragma pack`或`struct`对齐成员可避免数据错位。
错误处理:建议检查`fopen`、`fwrite`等函数的返回值,确保操作成功。
通过以上方法,可灵活实现二进制数据的存储需求。