【发布时间】:2018-05-16 16:04:13
【问题描述】:
我在将 '1' 和 '0' 的 char 数组作为二进制文件写入文件时遇到了麻烦。 这是我正在尝试做的一个例子:
int main(){
FILE * file;
file = fopen("file" , "w+b");
char buffer[8] = "11001100"; // 8 bits-> 1 byte to write
fwrite(buffer,1,8,file);
fclose(file);
return 0;
}
问题是它在我的文件中将自己写入为文本(写入 8 个字节),而不是二进制/仅 1 个字节。
我做错了什么?
提前感谢您的帮助。
【问题讨论】:
-
标准库不知道你想要达到什么目的,也不会神奇地将你的字符序列打包/转换成一个字节。在您尝试写入之前,您必须手动将其转换为一个字节的数据。之后,您可以使用
fwrite将该字节简单地写入文件。 -
您可以探索
strtoul,它将字符串转换为值,使用字符串字符的数字基数。然后将转换后的值写入输出文件。 -
... 请记住,要使用
strtoul,您必须在序列中添加一个零终止符。此时它不是一个字符串 - 它的末尾没有零终止符。 -
我怀疑您将不得不编写一些代码来迭代字符并将掩码或掩码到输出字节中。如果您从第一个字符开始,那将是 msb,因此您可以将掩码作为 0x80 开始。如果 char 是 '1',或者在掩码中。迭代字符时向右移动掩码。
-
'0'和'1'与0和1完全不同。您的字符串中有 8 个字节,而不是 8 位的 1 个字节。如果您将其更改为unsigned char c = 0xcc;,那么您将拥有 8 位作为0b11001100
标签: c arrays file binary fwrite