user-0 提问: 请教一下fprintf函数和fwrite的区别？帮忙解答一下下面的问题。

回复:
user: user-1
content: 电脑内存或文件内容或传输内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容或传输内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……   推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。  不要把 fopen("...","...");fscanf,fprintf,fgets,fgetc,fclose //读时把\r\n替换成\n，写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fseek,ftell,fread,fwrite,fgetc,fclose //不作以上替换，遇到\x1a仍继续读;读写的内容当字节看待 弄混了

user: user-2
content: FILE*  pTrain = fopen(strFinalTrain, "wb");    这才是控制 二进制 输出的关键吧  反正我现在使用的是 fwrite fwrite(pRightDat + nFtrLen*i, 2 * nFtrLen, 1, pTrain);  你写个测试用例 自己看下   (实践了 才能真正知道 好多人 说的也不一定对 )

user: user-0
content: 引用 18 楼 自信男孩的回复:你以什么形式打开rb还是r+，还是其他？、 就是一道选择题。emm题目我给了

user: user-3
content: 你以什么形式打开rb还是r+，还是其他？、

user: user-0
content: 引用 14 楼 lin5161678的回复:[quote=引用 13 楼 qq_45152498 的回复:] [quote=引用 12 楼 lin5161678的回复:][quote=引用 11 楼 qq_45152498 的回复:] 所以，fprintf就是ASCII形式存放。fwrite是用二进制存放的呀。那应该选用fwrite吧emmm 你用 %c 把 int 4个字节的内容都写入文件  效果和 fwrite 是一样的 早就说了 都可以[/quote] 你看看楼上，他说那道题应该选printf函数。[/quote]瞎说嘛[/quote] 我觉得他说的在理啊哈哈哈

user: user-4
content: 引用 13 楼 qq_45152498 的回复:[quote=引用 12 楼 lin5161678的回复:][quote=引用 11 楼 qq_45152498 的回复:] 所以，fprintf就是ASCII形式存放。fwrite是用二进制存放的呀。那应该选用fwrite吧emmm 你用 %c 把 int 4个字节的内容都写入文件  效果和 fwrite 是一样的 早就说了 都可以[/quote] 你看看楼上，他说那道题应该选printf函数。[/quote]瞎说嘛

user: user-0
content: 引用 12 楼 lin5161678的回复:[quote=引用 11 楼 qq_45152498 的回复:] 所以，fprintf就是ASCII形式存放。fwrite是用二进制存放的呀。那应该选用fwrite吧emmm 你用 %c 把 int 4个字节的内容都写入文件  效果和 fwrite 是一样的 早就说了 都可以[/quote] 你看看楼上，他说那道题应该选printf函数。

user: user-4
content: 引用 11 楼 qq_45152498 的回复:所以，fprintf就是ASCII形式存放。fwrite是用二进制存放的呀。那应该选用fwrite吧emmm 你用 %c 把 int 4个字节的内容都写入文件  效果和 fwrite 是一样的 早就说了 都可以

user: user-0
content: 引用 10 楼 弓人水的回复:整数是四个字节（也就是32位），转换为字节码char *（fwrite写入）的话，就是四个字节大小0x01 0x00 0x00 0x00(32位int，小端存储)； fprintf会把整数转换字符串，然后每个字符对应一个ASCII（也就是1一个字节），比如：1就是1个字节（0x31）; 1000，就是四个字节（0x31 0x30 0x30 0x30） 所以，fprintf就是ASCII形式存放。fwrite是用二进制存放的呀。那应该选用fwrite吧emmm

user: user-5
content: 整数是四个字节（也就是32位），转换为字节码char *（fwrite写入）的话，就是四个字节大小0x01 0x00 0x00 0x00(32位int，小端存储)； fprintf会把整数转换字符串，然后每个字符对应一个ASCII（也就是1一个字节），比如：1就是1个字节（0x31）; 1000，就是四个字节（0x31 0x30 0x30 0x30）

user: user-0
content: 引用 8 楼 弓人水的回复:int n=1; fwrite(&n, sizeof(int), 1, f); // f中被写4个字节0x01 0x00 0x00 0x00(32位int，小端存储) fprintf(f, "%d", n);              // f中被写1个字节0x31(即1的ASCII码) 所以fprintf写入的才是整数的二进制格式，如果用fwrite至少要先转码。 追问一下，fwrite是将数据不经转换直接以二进制的形式写入文件，而fprintf是将数据转换为字符后再写入文件。是什么意思？

user: user-5
content: int n=1; fwrite(&n, sizeof(int), 1, f); // f中被写4个字节0x01 0x00 0x00 0x00(32位int，小端存储) fprintf(f, "%d", n);              // f中被写1个字节0x31(即1的ASCII码) 所以fprintf写入的才是整数的二进制格式，如果用fwrite至少要先转码。

user: user-4
content: 引用 6 楼 qq_45152498 的回复:嗯呐，谢谢啦！可是那个fprintf不是转换成字符存放吗？fwrite才是直接用二进制呀用%c 就行了

user: user-0
content: 引用 5 楼 lin5161678的回复:[quote=引用 4 楼 qq_45152498 的回复:] [quote=引用 3 楼 lin5161678的回复:]都可以  单项选择题给了四个选项，选的是fprintf。为什么呢？感觉fwrite才是以二进制存放的吧。[/quote] 不管是 fprintf 还是 fwrite 都没问题 只要FILE* 是二进制模式   单选题至少2个选项可以选? 那就是题目错了  习惯就好了 [/quote] 嗯呐，谢谢啦！可是那个fprintf不是转换成字符存放吗？fwrite才是直接用二进制呀

user: user-4
content: 引用 4 楼 qq_45152498 的回复:[quote=引用 3 楼 lin5161678的回复:]都可以  单项选择题给了四个选项，选的是fprintf。为什么呢？感觉fwrite才是以二进制存放的吧。[/quote] 不管是 fprintf 还是 fwrite 都没问题 只要FILE* 是二进制模式   单选题至少2个选项可以选? 那就是题目错了  习惯就好了

user: user-0
content: 引用 3 楼 lin5161678的回复:都可以  单项选择题给了四个选项，选的是fprintf。为什么呢？感觉fwrite才是以二进制存放的吧。

user: user-4
content: 都可以

user: user-0
content: 引用 1 楼 user-6的回复:二进制是fwrite吧 对呀，所以这个用fprintf还是fwrite.答案给的是fprintf.我就不知道了

user: user-6
content: 二进制是fwrite吧