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