为什么数字字符的ASCII码会写入文件?

为什么数字字符的ASCII码会写入文件?,c,binary,ascii,fwrite,C,Binary,Ascii,Fwrite,我正在用下面的代码编写一个二进制文件 char x[] = "02 00 27 FF FF 92 20"; FILE *ptr_x; ptr_x=fopen("xx","wb"); fwrite(x, 1, 1, ptr_x); 问题是,如果我打开文件,它会这样写: "30 32 20 30 30 20 32 37 20 46 46 20 46 46 20 39 32 20 32 30" 这是上面文本的ASCII表示形式。 我想要的是一个文件,其中包含的值完全是用ASCI表示的值,而不是用A

我正在用下面的代码编写一个二进制文件

char x[] = "02 00 27 FF FF 92 20";
FILE *ptr_x;
ptr_x=fopen("xx","wb");
fwrite(x, 1, 1, ptr_x);
问题是,如果我打开文件,它会这样写:

"30 32 20 30 30 20 32 37 20 46 46 20 46 46 20 39 32 20 32 30"
这是上面文本的ASCII表示形式。 我想要的是一个文件,其中包含的值完全是用ASCI表示的值,而不是用ASCI表示的值

问候,

解决方案:

uint8_t x[68] = {0x05,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
                0x00,0x00,0x00,0x18,0xDA,0x18,0xF1,0x18,
                0xDA,0xF1,0x18,0xF1,0x18,0x00,0x05,0x02,
                0x01,0x14,0x00,0x01,0x00,0x0B,0x00,0x33,
                0x01,0x01,0x04,0x02,0x00,0x27,0xFF,0xFF,
                0x92,0x20,0x00,0x00,0x00,0x23,0xFE,0x00,
                0x04,0x02,0x00,0x27,0xFF,0xFF,0x04,0x02,
                0x00,0x23,0xFE,0x00,0x00,0x00,0x00,0x00,
                0x00,0x00,0x92,0x20};

FILE *ptr_x;
ptr_x=fopen("xx","wb");
fwrite(x, 68, 1, ptr_x);

尝试使用如下数组:
unsignedcharx[]={0x02,0x00,0x27,0xFF,0xFF,0x92,0x20}
或者,更好的方法是使用
uint8\t
而不是
无符号字符

fwrite(x, 1, 1, ptr_x);
表示“将数据写入
x
指向
ptr_x
。该数据由
1
元素组成,每个元素的大小为
1
字节。”

那是谎言。您的数据由20个字节组成。因此,数据由20个元素组成,每个元素有1个字节:

fwrite(x, 1, 20, ptr_x);
或者它由1个大小为20字节的元素组成:

fwrite(x, 20, 1, ptr_x);
或更一般的:

fwrite(x, strlen(x), 1, ptr_x);

您希望写入文件的内容是什么?嗯
x
是一个字符串,包含(在您的系统上)ASCII编码字符。这就是当你写字符串的原始数据时要写的内容。你的程序会把一个字节写到文件中。因此,文件不能包含
“30 32 20 30 20 32 37 20 46 46 20 46 46 20 46 20 39 32 20 32 30”
您确定您发布的代码就是您正在使用的代码吗?您的解决方案是错误的,应该是
无符号字符
uint_8