2016-12-14 850 views
0

對於我的數據記錄器項目,我將數據記錄到SD卡。在這裏我以二進制格式存儲數據。我正在記錄加速度計和溫度傳感器。我可以逐字節讀取數據。因此,爲了打印ADXL數據(兩個字節),我組合了每兩個字節的數據。因此必須組合四個字節來獲取溫度數據。不幸的是,我沒有打印實際的數據。有一些轉換問題。我正在尋找一些關於如何將數據轉換爲浮點數的幫助。如何將二進制數據轉換爲浮點值?

代碼來讀取和打印二進制uint16_t(加速度數據):工作

while ((nr = fgetc(logFile)) != EOF){ 
     pc.printf(" \r\n %d ",nr); 
      acc_con[i] = nr; 
      if (i == 1){ 
      acc = (acc_con[1]<<8) | acc_con[0]; 
      pc.printf(" \r\n %i ",acc); 
      i = 0;} 
      else i++; 
     } 

代碼來讀取和打印二進制浮動(北部沿海地區數據):不工作

while ((nr = fgetc(logFile)) != EOF){ 
     pc.printf(" \r\n %d ",nr); 
      humicon[i] = nr; 
      if (i == 3){ 
      hum = (humicon[0] << 24) | (humicon[1] << 16) | (humicon[2] << 8) | humicon[3]; 
      pc.printf(" \r\n %f ",hum); 
      i = 0;} 
      else i++; 
      } 

由字節來自變量nr的8字節原始數據是:24,58,46,66,變量hum的輸出是:406466112.000000。

我可以用fread讀溼度或溫度(浮標)。不幸地使用fread我必須知道存儲在文件中的字節數。使用下面的代碼,我也可以打印浮動圖案。 INT主(){

int nr; 
FILE *fp = fopen("/sd/PCE000.bin", "rb"); 
float read[1]; 
fread(read,sizeof(float),1,fp); 
pc.printf("\r\n %f",read[0]); 
    fclose(fp); 

}

我想知道像轉換式(acc_con [1] < < 8)| acc_con [0]。謝謝。

+2

請參閱[**'struct' **](https://docs.python.org/3/library/struct.html) –

+1

這是python還是C的問題? – cdarke

+0

是C.做了如下答案。 – Gandhi

回答

1

如果你想這樣做在Python,這聽起來像爲struct模塊工作:

>>> struct.unpack("f", "".join([chr(x) for x in [24, 58, 46, 66]])) 
(43.556732177734375,) 

這是假設little-endian字節順序。

在C中,則可以使用memcpy()

float x; 
const unsigned char bytes[] = { 24, 58, 46, 66 }; 
memcpy(&x, bytes, sizeof x); 
printf("%f\n", x); 
+0

它的工作。這是在C.謝謝你。 – Gandhi

0

隨着

unsigned int hum; 
.... 
hum = (humicon[0] << 24) | (humicon[1] << 16) | (humicon[2] << 8) | humicon[3]; 

要轉換的8位數據到32個整數數據。您可以直接存儲這些數據。或者,如果你絕對想要存儲在浮動,你可以使用。

float hum_f; 
.... 
hum_f = hum; 
0

Yap,不是簡單的函數,將字節數組轉換爲浮點函數。我正在尋找實施它以避免便攜的原因。小端和大端機器之間也存在差異。 但這個問題有幾個竅門。 首先文件大小,你必須包含「sys/stat.h」,具有小差異也是可移植的。但不是必需的。 讀它爲char緩衝區:

char f[sizeof(float)]; 
if (fread(f,1,sizeof(float), yourfile) ==sizeof(float)) 
{ 
    float *flt_ptr=f; 
    printf("%f\n",*flt_ptr); 
} 

C是美妙的那些東西,也沒有必要投everithing。

相關問題