user-0 提问: C语言如何将字符串写入二进制文件中？这个文件存储的应该是二进制数据，用记事本打开是乱码

回复:
user: user-1
content: 二进制读写和文本读写是两个概念。  字符数据本身在内存中就经过了编码，所以无论是二进制还是文本形式都是一样的，而对于非字符数据来说，例如inti=10；如果用二进制来进行存储的话为1010，但是如果需要用文本形式来进行存储的话就必须进行格式化编码（对1和0分别编码，即形式为‘1’和‘0’分别对应的码值）

user: user-0
content: 引用 27 楼 ForestDB 的回复:你老师所说的0x0990 到底是0x0990？还是"0x0990"？ 还请先弄清楚。字符串“0X0990”

user: user-2
content: 引用 18 楼 wsckxs 的回复:[quote=引用 17 楼 luciferisnotsatan 的回复:] ‘0' 这个字符的ACSII码值是 0x30。  unsigned short 的值为0x30时，它代表数值为0么？额，应该不是吧。。什么意思啊不懂。。[/quote]  char a = '0'; // 相当于 char a = 0x30 unsigned short b = a;   ------------------------------------------------ unsigned short b = 0;  一个是给b 赋值 48， 一个是赋值 0.  这个和big endian没什么关系，你在同一台机器上运行的，没这个问题。

user: user-3
content: 你老师所说的0x0990 到底是0x0990？还是"0x0990"？ 还请先弄清楚。

user: user-0
content: 引用 25 楼 ForestDB 的回复:不过看LZ的标题，似乎应该是 char * i = "0x0990"; 如果是这样的化，就该 int ii = atoi(i); 然后再 fwrtie(&ii, sizeof(int), 1 file);什么意思？运行一下结果没道理啊

user: user-0
content: 引用 16 楼 wsckxs 的回复:[quote=引用 13 楼 luciferisnotsatan 的回复:] [quote=引用 10 楼 wsckxs 的回复:] [quote=引用 8 楼 ForestDB 的回复:] int i = 1; FILE * file = fopen("test.dat", "wb"); fwrite(&i, sizeof(int), 1, file); fclose(file);  test.dat中应该有什么？其实我也是这么写的，老师说结果不对[/quote] 你是不是直接把 ini 里的内容读出来然后直接写到 dat 里？  感觉你老师说的是： 从 ini 里读到字符串 “0x0990”， 然后转成 unsigned short（两字节）值，再存到 dat 里 [/quote]我确实是直接写到dat里了，为什么要转换为unsigned short？[/quote]老师之前提到过要big endian，我不知道什么意思，是不是跟这个有关啊

user: user-0
content: 引用 17 楼 luciferisnotsatan 的回复:‘0' 这个字符的ACSII码值是 0x30。  unsigned short 的值为0x30时，它代表数值为0么？额，应该不是吧。。什么意思啊不懂。。

user: user-2
content: ‘0' 这个字符的ACSII码值是 0x30。  unsigned short 的值为0x30时，它代表数值为0么？

user: user-0
content: 引用 13 楼 luciferisnotsatan 的回复:[quote=引用 10 楼 wsckxs 的回复:] [quote=引用 8 楼 ForestDB 的回复:] int i = 1; FILE * file = fopen("test.dat", "wb"); fwrite(&i, sizeof(int), 1, file); fclose(file);  test.dat中应该有什么？其实我也是这么写的，老师说结果不对[/quote] 你是不是直接把 ini 里的内容读出来然后直接写到 dat 里？  感觉你老师说的是： 从 ini 里读到字符串 “0x0990”， 然后转成 unsigned short（两字节）值，再存到 dat 里 [/quote]我确实是直接写到dat里了，为什么要转换为unsigned short？

user: user-0
content: 引用 8 楼 ForestDB 的回复:int i = 1; FILE * file = fopen("test.dat", "wb"); fwrite(&i, sizeof(int), 1, file); fclose(file);  test.dat中应该有什么？00000000 00000001是这样吧

user: user-0
content: 引用 13 楼 luciferisnotsatan 的回复:[quote=引用 10 楼 wsckxs 的回复:] [quote=引用 8 楼 ForestDB 的回复:] int i = 1; FILE * file = fopen("test.dat", "wb"); fwrite(&i, sizeof(int), 1, file); fclose(file);  test.dat中应该有什么？其实我也是这么写的，老师说结果不对[/quote] 你是不是直接把 ini 里的内容读出来然后直接写到 dat 里？  感觉你老师说的是： 从 ini 里读到字符串 “0x0990”， 然后转成 unsigned short（两字节）值，再存到 dat 里 [/quote]为什么？？？

user: user-3
content: 不过看LZ的标题，似乎应该是 char * i = "0x0990"; 如果是这样的化，就该 int ii = atoi(i); 然后再 fwrtie(&ii, sizeof(int), 1 file);

user: user-0
content: 引用 23 楼 ForestDB 的回复:int i = 0x0990; FILE * file = fopen("test.dat", "wb"); fwrite(&i, sizeof(int), 1, file); fclose(file);这样是不对的，我这么写老师说不对。。 我想是不是应该将0990这样的十六进制数据写入，像这样： sscanf( data, "%x", &j );//data[]字符数组存储数据0990，j是unsigned short格式 fwrite(&j,sizeof(unsigned short),1,fp2);

user: user-2
content: 引用 10 楼 wsckxs 的回复:[quote=引用 8 楼 ForestDB 的回复:] int i = 1; FILE * file = fopen("test.dat", "wb"); fwrite(&i, sizeof(int), 1, file); fclose(file);  test.dat中应该有什么？其实我也是这么写的，老师说结果不对[/quote] 你是不是直接把 ini 里的内容读出来然后直接写到 dat 里？  感觉你老师说的是： 从 ini 里读到字符串 “0x0990”， 然后转成 unsigned short（两字节）值，再存到 dat 里

user: user-3
content: int i = 0x0990; FILE * file = fopen("test.dat", "wb"); fwrite(&i, sizeof(int), 1, file); fclose(file);

user: user-4
content: 字符串只是二进制的一个表现形式

user: user-3
content: 引用 9 楼 wsckxs 的回复:[quote=引用 8 楼 ForestDB 的回复:] int i = 1; FILE * file = fopen("test.dat", "wb"); fwrite(&i, sizeof(int), 1, file); fclose(file);  test.dat中应该有什么？REG_BURST= 0x0990, 0x000C, 0x0000, 0x002B, 0x0000, 0x0006, 0x0000, 0x035A, 0x02D0这样的数据[/quote] LZ想多了，我就是问我的代码执行后test.dat中应该有什么。

user: user-0
content: 引用 21 楼 ForestDB 的回复:[quote=引用 15 楼 wsckxs 的回复:] [quote=引用 8 楼 ForestDB 的回复:] int i = 1; FILE * file = fopen("test.dat", "wb"); fwrite(&i, sizeof(int), 1, file); fclose(file);  test.dat中应该有什么？00000000 00000001是这样吧[/quote] 差不多，但是不太准确 0x00 0x00 0x00 0x01 如果你认为我说的和你说的是一回事，同时也知道大小端的问题，那么可以认为你理解了二进制文件 那么就是你没有理解老师的需求 [/quote]老师就是让把类似0x0990这样的数据以二进制形式写入文件，你觉得应该怎么做？

user: user-3
content: 引用 15 楼 wsckxs 的回复:[quote=引用 8 楼 ForestDB 的回复:] int i = 1; FILE * file = fopen("test.dat", "wb"); fwrite(&i, sizeof(int), 1, file); fclose(file);  test.dat中应该有什么？00000000 00000001是这样吧[/quote] 差不多，但是不太准确 0x00 0x00 0x00 0x01 如果你认为我说的和你说的是一回事，同时也知道大小端的问题，那么可以认为你理解了二进制文件 那么就是你没有理解老师的需求

user: user-0
content: 引用 8 楼 ForestDB 的回复:int i = 1; FILE * file = fopen("test.dat", "wb"); fwrite(&i, sizeof(int), 1, file); fclose(file);  test.dat中应该有什么？其实我也是这么写的，老师说结果不对