C 从字符串到二进制文件
我有个问题,我需要在C语言的文本文件中写入位。C 从字符串到二进制文件,c,file,C,File,我有个问题,我需要在C语言的文本文件中写入位。 我想保存一个大小为5字节的字符串 char code[] = "0110"; 在一个文件中,一点一点地,这样最终的文件大小只有4位 Input: size(file) = 5 bytes. Output: size(file) = 4 bits. char *in = "0110"; char out = 0; int i = 0; while (in[i] != '\0') { out = out * 2 + in
我想保存一个大小为5字节的字符串
char code[] = "0110";
在一个文件中,一点一点地,这样最终的文件大小只有4位
Input: size(file) = 5 bytes.
Output: size(file) = 4 bits.
char *in = "0110";
char out = 0;
int i = 0;
while (in[i] != '\0') {
out = out * 2 + in[i] - '0';
i++;
}
// Write out in your file.
我的问题是:C中是否有一个函数(例如fwrite())可以做到这一点?尝试将表示二进制数的字符串转换为字符,然后在文件中写入字节 因为你不能只写4位,所以你会有一些开销
Input: size(file) = 5 bytes.
Output: size(file) = 4 bits.
char *in = "0110";
char out = 0;
int i = 0;
while (in[i] != '\0') {
out = out * 2 + in[i] - '0';
i++;
}
// Write out in your file.
C API将(合理地)不允许您将4位写入文件。
我也不认为有一个文件系统可以将内容记录为半字节!
这只是说,您要做的是将1
s和0
s字符串解释为一个字节中的一组位
为了做到这一点,你必须写位。
这通常通过位运算符实现
因此,例如,如果您有一个8字节的“流”10011100
,您可以用以下代码打包一个字节:
char *sb = "10011100";
unsigned char next = 0; // Next bit to process
unsigned char pos = 0; // Position of next bit
unsigned char byte = 0; // Where to store the result
for (i = 0; i < 8; i++) {
if ((*sb) == '1') {
next = 0x01;
}
else {
next = 0x00;
}
byte |= next << pos;
pos++;
}
char*sb=“10011100”;
无符号字符next=0;//下一个要处理的位
无符号字符pos=0;//下一位的位置
无符号字符字节=0;//在哪里存储结果
对于(i=0;i<8;i++){
如果((*sb)='1'){
next=0x01;
}
否则{
next=0x00;
}
byte |=下一步,我怀疑任何文件系统都允许位的大小。你可能会有额外的开销。你能提供更多的视角来解释你为什么要这样做吗?你可以将它转换成int
或char
,然后写入文件。这些老师在他们的家庭作业问题上变得更有想象力了!stackoverflow是一个Q&一个站点。你的问题是什么?@ouah-我猜问题是“我不能被强迫做作业,你能帮我做吗?”不仅任何文件系统都不能让你写少于一个字节,而且绝大多数文件系统都使用整个块(比如4KB)对于任何文件,无论多么小。非常感谢,似乎这是唯一的解决方案:)。@user2536844我编辑过,因为你解释说这是为了实现哈夫曼,这个问题不是直接的家庭作业:)。非常感谢,我对这个问题有更广泛的看法。