为什么将数字字符的 ASCII 码写入文件?
Why does the ASCII codes of number characters get written to the file?
我正在用下面的代码写一个二进制文件
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);
尝试使用这样的数组:unsigned char x[] = {0x02, 0x00, 0x27, 0xFF, 0xFF, 0x92, 0x20};
或者,更好的是,使用 uint8_t
而不是 unsigned char
。
fwrite(x, 1, 1, ptr_x);
表示"Write the data to that x
points to to ptr_x
. That data consists out of 1
element(s) and every element is 1
byte in size."
那是谎言。您的数据由 20 个字节组成。所以要么数据由 20 个元素组成,每个元素 1 个字节:
fwrite(x, 1, 20, ptr_x);
或者它由 1 个大小为 20 字节的元素组成:
fwrite(x, 20, 1, ptr_x);
或更一般的:
fwrite(x, strlen(x), 1, ptr_x);
我正在用下面的代码写一个二进制文件
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);
尝试使用这样的数组:unsigned char x[] = {0x02, 0x00, 0x27, 0xFF, 0xFF, 0x92, 0x20};
或者,更好的是,使用 uint8_t
而不是 unsigned char
。
fwrite(x, 1, 1, ptr_x);
表示"Write the data to that x
points to to ptr_x
. That data consists out of 1
element(s) and every element is 1
byte in size."
那是谎言。您的数据由 20 个字节组成。所以要么数据由 20 个元素组成,每个元素 1 个字节:
fwrite(x, 1, 20, ptr_x);
或者它由 1 个大小为 20 字节的元素组成:
fwrite(x, 20, 1, ptr_x);
或更一般的:
fwrite(x, strlen(x), 1, ptr_x);