[英]Read binary file to integer range of -32767 to 32767
我需要編寫一個程序,將二進制文件讀入-32767到32767的范圍內,到目前為止,下面的腳本將二進制文件讀入了-128到127的范圍。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
FILE *fp = NULL;
signed char shint[2000] = "";
int i = 0;
size_t bytes = 0;
if ((fp = fopen("raw_data.ht3", "rb")) == NULL) {
printf ("could not open file\n");
return 0;
}
if ((bytes = fread(&shint, 1, 2000, fp)) > 0 ) { //bytes more than 0
for (i = 0; i < bytes; i++) {
printf ("%d\n", shint[i]);
}
}
fclose(fp);
return 0;
}
關於二進制文件的更多信息,我的講師說應該將二進制文件讀入 4 字節數據(我不確定我的措辭是否正確)。 數據非常大,所以我停止讀取數據,直到 2000 個數據。 雖然將來我需要閱讀所有這些。
這就是我想在一天結束時繪制的方式。 得到想要的數據后,我會調用我們的 matlab 或 scilab。
謝謝!
對輸入數據使用4
字節表示,即替換
signed char shint[2000] = "";
和
long int shint[2000] = "";
和
if ((bytes = fread(&shint, 1, 2000, fp)) > 0 ) { //bytes more than 0
和
if ((bytes = fread(&shint, 4, 2000, fp)) > 0 ) { //bytes more than 0
和
printf ("%d\n", shint[i]);
和
printf ("%ld\n", shint[i]);
筆記:
根據您的變量名稱( shint
,即short int
)以及-32768
到+32767
的范圍,您的講師似乎想要2
個字節的數字,而不是4
。
在這種情況下,在聲明中使用short int
(或簡稱為short
)並將2
作為fread()
函數的第二個參數。
我沒有你的數據來測試(我沒有測試我的答案)但它應該是這樣的:
首先signed char shint[2000] = "";
持有 2000 個有符號字符(它們確實是有符號的 8 位值,請看這里- 這是處理數據類型大小時非常方便的資源),因此您需要一些值來保存有符號的 32 位(4 字節)值,這取決於您的機器架構,假設它是 32 位整數( 不難找出),您可以將值保存在int shint[2000] = "";
接下來你需要注意的是函數fread
這里是一些友好的文檔,這個函數的第二個參數(在你的代碼中是 1)應該是字節數,代表你想要讀取的數據中的單個值,所以在你的情況下應該是 4(字節)。 其他參數應該沒問題。
編輯:為了確保您正在閱讀 4 個字節,您確實可以使用 MarianD 給出的答案並存儲long
值。
據我了解,您希望輕松訪問字符和帶符號的 16 位整數。
#define SIZE 2000
union
{
char shint_c[SIZE * 2];
short shint[SIZE];
}su;
然后在你的 if
fread(&su, 2, SIZE, fp)
並在循環中打印短褲
printf ("%hd\n", su.shint[i]);
或 8 位整數
printf ("%hhd\n", su.shint_c[i]);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.