F写错答案
Fwrite wrong answer
在我的项目中,我编写了 a.bin 文件,其中包含无符号短格式(16 位 LE 值)形式的传感器数据。但我得到了错误的价值。你们能建议这里出了什么问题吗?
#include<stdio.h>
int main()
{
FILE *fp = fopen("a.bin","ab");
unsigned short us;
us=123;
fwrite(&us,2,1,fp);
printf("%04X",us); // 0x:007B
us=1234;
fwrite(&us,2,1,fp);
printf("%04X",us); // 0x04D2
us=-3145;
fwrite(&us,2,1,fp);
printf("%04X",us); // 0xF3B7
fclose(fp);
}
在我执行 fwrite() 之后
a.bin
7b 00 d0 bc 04 d0 b8 d0 b7
但是我想要
a.bin
7b 00 04 d2 f3 b7
修正你的错误后,代码对我来说工作得很好。
请注意,以 "a"
模式打开文件意味着“追加”。我将其更改为 "w"
,这将覆盖现有文件:
fwrite.c
:
#include<stdio.h>
int main(void)
{
FILE *fp = fopen("a.bin","wb");
unsigned short us;
us = 123;
fwrite(&us, sizeof(us), 1, fp);
printf("%04hX\n",us); // 007B
us = 1234;
fwrite(&us, sizeof(us), 1, fp);
printf("%04hX\n",us); // 04D2
us = -3145;
fwrite(&us, sizeof(us), 1, fp);
printf("%04hX\n",us); // F3B7
fclose(fp);
return 0;
}
结果:
$ gcc -Wall -Werror fwrite.c
$ ./a.out
007B
04D2
F3B7
$ hexdump -Cv a.bin
00000000 7b 00 d2 04 b7 f3 |{.....|
00000006
在我的项目中,我编写了 a.bin 文件,其中包含无符号短格式(16 位 LE 值)形式的传感器数据。但我得到了错误的价值。你们能建议这里出了什么问题吗?
#include<stdio.h>
int main()
{
FILE *fp = fopen("a.bin","ab");
unsigned short us;
us=123;
fwrite(&us,2,1,fp);
printf("%04X",us); // 0x:007B
us=1234;
fwrite(&us,2,1,fp);
printf("%04X",us); // 0x04D2
us=-3145;
fwrite(&us,2,1,fp);
printf("%04X",us); // 0xF3B7
fclose(fp);
}
在我执行 fwrite() 之后
a.bin
7b 00 d0 bc 04 d0 b8 d0 b7
但是我想要
a.bin
7b 00 04 d2 f3 b7
修正你的错误后,代码对我来说工作得很好。
请注意,以 "a"
模式打开文件意味着“追加”。我将其更改为 "w"
,这将覆盖现有文件:
fwrite.c
:
#include<stdio.h>
int main(void)
{
FILE *fp = fopen("a.bin","wb");
unsigned short us;
us = 123;
fwrite(&us, sizeof(us), 1, fp);
printf("%04hX\n",us); // 007B
us = 1234;
fwrite(&us, sizeof(us), 1, fp);
printf("%04hX\n",us); // 04D2
us = -3145;
fwrite(&us, sizeof(us), 1, fp);
printf("%04hX\n",us); // F3B7
fclose(fp);
return 0;
}
结果:
$ gcc -Wall -Werror fwrite.c
$ ./a.out
007B
04D2
F3B7
$ hexdump -Cv a.bin
00000000 7b 00 d2 04 b7 f3 |{.....|
00000006