gpt4 book ai didi

c - 二进制文件只能以十六进制格式打印,不能以二进制格式打印

转载 作者:行者123 更新时间:2023-11-30 15:25:17 25 4
gpt4 key购买 nike

Here是一个二进制文件,包含:


0xff 0xff 0xff

正好是三个字节。

我尝试使用dump_file函数here

#include "table.h"
#include "debug.h"

typedef unsigned int Code


void dump_file( char* fileName[] )
{
char c;
for (int i = 0; i < 4; ++i)
{
log_info("File: %s",fileName[i]);
FILE* file = fopen(fileName[i],"rb");
fread(&c,sizeof(char),1,file);
while( !feof(file) ){
dump_code( c , 8 );
fread(&c,sizeof(char),1,file);
}
}
}

void dump_code( Code code,int BitsNum )
{
int mask = 1 << (BitsNum-1);
for (int i = 0; i < BitsNum ; ++i)
{
if(i%8==0)putchar('|');
putchar((mask & code) ? '1' : '0');
code <<= 1;
}
puts("");
}

以二进制格式打印文件,但什么也不打印。 (不知怎的,它以一种不受欢迎的方式撞到了EOF??)

我还使用 Unix 统一xxd。当我发出 xxd 信号以二进制方式打印我的文件时,它什么也不打印。但如果我选择以十六进制打印,它会按预期打印。这个文件有什么问题?

该文件由 a parser 生成。 C 程序使用fseek 跳转到文件中的各个位置并打印相应的二进制代码。它可能会像:

0th byte --> 1st byte --> 3rd byte --> 5th byte --> 2nd byte --> 4th byte --> 6th byte

保证生成的文件中没有“泄漏”,即每个字节都会被遍历。

这种奇怪行为的原因是什么?

<小时/>

更新 1

虽然 samgak 指出这可能是由于 0xff 的解释造成的,但我的其他一些实验表明,即使文件包含:

0x01 0x01 0x01

这会导致相同的现象。

<小时/>

更新2

以下是将Code写入文件的相关代码:

#define CODE_FILE_NUM 3
void writeCode( FILE* out[] , Code code ){
for (int i = 0; i < CODE_FILE_NUM; ++i){
fwrite(&code,sizeof(char),1,out[i]);
code >>= 8;
}
}

Code 是一个 unsigned int,有 4 个字节。函数writeCode将仅考虑较低的3个字节并将每个字节写入3个单独的文件。

最佳答案

我已经找到原因了。这是因为我忘记关闭输出文件。

我尝试转储未关闭二进制文件(即:打开并从未关闭的文件读取数据。),这导致了不可预测的行为。

关于c - 二进制文件只能以十六进制格式打印,不能以二进制格式打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27997892/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com