私のデータロガープロジェクトでは、データをSDカードに記録しています。ここではデータをバイナリ形式で保存します。私は加速度計と温度&湿度センサーを記録しています。バイトごとにデータを読み取ることができました。したがって、ADXLデータ(2バイト)を印刷するために、2バイトのデータをそれぞれ結合します。したがって、温度データを得るために4バイトを結合しなければならない。残念ながら私は実際のデータを印刷できませんでした。変換に問題があります。私は浮動小数点にデータを変換する方法に関するいくつかの助けを探しています。バイナリデータを浮動小数点値に変換する方法は?
(加速度データ)をuint16_tするバイナリを読み、印刷するためのコード:(temparatureデータ)をfloat型にバイナリを読み、印刷する作業
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からの1バイトの生データは、24,58,46,66であり、可変ハムからの出力は、406466112.000000である。
フリーダで湿度や温度(フロート)を読み取ることができました。不幸にも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);
}
Iのような変換式を知りたい(acc_con [1] < < 8)| acc_con [0]。ありがとうございました。
[** 'struct' **](https://docs.python.org/3/library/struct.html) –
を参照してください。これはPythonまたはCの質問ですか? – cdarke
これはCです。以下の回答を完了してください。 – Gandhi