我正在使用以下代码编写二进制文件
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);
答案 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);