2016-06-10 110 views
-2

在我的项目中我写了一个具有无符号短(16位LE值)形式的传感器数据的a.bin文件。但我得到了错误的价值。你们能提出这里发生了什么问题吗?Fwrite错误答案

#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 
+0

你所说的 “错误值” 是什么意思?有什么问题? – melpomene

+0

我想a.bin 7b 00 D2 04 B7 F3,但是不正确。 – WKcho

+0

你是什么意思“不正确”?有什么问题? – melpomene

回答

2

修复你的错误后,代码为我工作就好了。

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

    return 0; 
} 

结果:

$ gcc -Wall -Werror fwrite.c 
$ ./a.out 
007B 
04D2 
F3B7 
$ hexdump -Cv a.bin 
00000000 7b 00 d2 04 b7 f3         |{.....| 
00000006 
+0

我发现Notepad ++显示不同的十六进制输出。谢谢回答〜! – WKcho