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

时间:2016-10-27 10:10:18

标签: 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表示。

此致

解决方案:

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);

2 个答案:

答案 0 :(得分:4)

尝试使用这样的数组:unsigned char x[] = {0x02, 0x00, 0x27, 0xFF, 0xFF, 0x92, 0x20};或者更好的是使用uint8_t代替unsigned char

答案 1 :(得分:0)

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);