2016-06-10 355 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