Modbus TCP を介して通信する C プログラムを作成しています。3.14
の 16 進表現で、modbus クライアントにfloat を送信します0x4048F5C3
。私の C コードは modbus パケットを正しく受信しておりunsigned char *buffer
、値を取得できるように を float として再解釈する必要があります3.14
。これが私のコードです
int main()
{
setup_modbus_tcp();
unsigned char buffer[4] = { 0x00, 0x00, 0x00, 0x00 };
get_modbus_data(buffer, 4);
//Buffer now holds { 0x40, 0x48, 0xF5, 0xC3 };
float value = *(float *)buffer;
//value is now -490.564453
}
これで、この問題はエンディアンが原因であることがわかります。バッファが次のようになるようにエンディアンを交換すると、次のようになります。
{ 0xC3, 0xF5, 0x48, 0x40 };
その後、すべて正常に動作します。でもこれはちょっと面倒くさい気がします。エンディアンを交換する必要がありますか? または、エンディアンを指定する方法はありますか:
float value = *(float *)buffer;