ST MCU から UART 経由でデータを取得し、値を PC 画面に表示していますが、float 型で期待した結果とは異なります。
画面に値を表示するために、TrueStudio for ST MCU と C# を使用しています。MCUでfloat値を使ってPCにデータを送信しているのですが、PCに入ってテキストボックスにfloat値を表示すると、思っていた結果と違いすぎます。TrueStudio のメモリ ビューとウォッチ ビューでは、以下のように表示されます。
TrueStudio MCU では、
- ウォッチ ウィンドウ: acc.x = 5.12400007
- メモリ ビュー: 浮動小数点形式の 5.124000E0 16 進数形式の CFF7A340
C#のビジュアルスタジオを介してPCでこのデータを取得できました
ウォッチ ウィンドウで byte[] 配列データを確認でき、取得したことがわかります
msg[4] = 0xCF, msg[5] = 0xF7, msg[6] = 0xA3, msg[7] = 0x40
- 12 月には 3489112896
この値をこれらで変換しましたが、必要なものが得られませんでした, 5.124
str = "3489112896" Convert.ToDouble(str) = 2246812992
dec を UInt32 に変換したので
u32 = Convert.ToDouble(str) u32 = 0xcff7a340 (double)u32 = 3489112896 (float)u32 = 3.48911283E+09 BitConverter.ToSingle(BitConverter.GetBytes((int)u32), 0) = -2.21599971E-35
TrueStudio では、以下のようにコピーします (C で)
memcpy(ðBuf[len], &g_Bsp.acc, sizeof(ACC_ST)); len += sizeof(ACC_ST);
ビジュアル スタジオでは、C#
UInt32 u32 = (UInt32)( msg[4] | (msg[5] << 8) | (msg[6] << 16) | (msg[7]<<24)); LOG("u32 : " + u32 + "\n");
最初に MSB/LSB で試してみましたが、望みどおりの結果が得られませんでした。C#で5.123浮動小数点値を取得するにはどうすればよいですか?