【问题标题】:Fwrite wrong answer [closed]Fwrite错误答案[关闭]
【发布时间】:2023-06-03 18:27:01
【问题描述】:

在我的项目中,我编写了一个.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.bin 7b 00 D2 04 B7 F3,但不正确。
  • “不正确”是什么意思?有什么问题?
  • 显示您的实际代码。这不会编译(a.bin 缺少引号)。我怀疑你所做的任何“改变”都是问题所在。
  • void main 是错误的,顺便说一句。

标签: c++ c fwrite short


【解决方案1】:

修复你的错误后,代码对我来说就很好了。

请注意,以"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

【讨论】:

  • 我发现Notepad++显示不同的十六进制输出..谢谢回答~!