我目前正在編寫一個程序,它存儲'uint16_t'數值的數組,然後將它們寫入二進制文件。由於尺寸考慮,我寫入二進制文件(因爲我將處理大量數據)。這是我到目前爲止的代碼:解析二進制到十進制
static int sizebuf=5;
int main(int argc, const char *argv[]){
uint16_t buff[sizebuf];
for(int i=0; i<sizebuf; i++){
buff[i]=i;
}
FILE *fpbin=fopen("test.bin","a+");
fwrite(buff, sizeof(uint16_t), sizeof(buff)/sizeof(uint16_t), fpbin);
rewind(fpbin);
uint16_t buffer[sizebuf];
fread(buff, sizeof(uint16_t), sizebuf, fpbin);
for (int i = 0; i < 5; i++)
{
printf("%" PRIu16 "\n",buffer[i]);
}
fclose(fpbin);
return 0;
}
當我檢查「TEST.bin,燒寫」輸出用「hexdump都」我得到如下:
0000000 0000 0001 0002 0003 0004
000000a
首先,我不是很確定我瞭解第一個「000000」和最後一個「00000a」值的存在。其次,我怎樣才能將這些值轉換回小數(即回到原始數值)?我所諮詢的來源之間的共識似乎暗示沒有這樣做的標準方式(我知道我正在處理通用二進制輸出),但是我可以如何處理我的具體轉換數據?
感謝您的幫助!
編輯: 添加的代碼 '的fread' 位之後,我接收到的輸出:
5
0
10416
49150
0
只需用'fread'將值讀回'uint16_t'。你是什麼意思轉換回ascii? 'printf'應該可以做到這一切。 –
「返回Ascii文本」 - 那些不是「ASCII文本」開頭。你可能意思是「回到十進制符號」。 – usr2564301
你確定最後一個'000000a'不在下一行嗎? – jxh