为什么数字字符的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