2016-12-14 849 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。

相关问题