問題が発生しました。MODBUS TCPの回答があります。これは次のように16進数でコード化されています:0 0 0 0 0 7 1 4 4 41 B8 6664。説明:最初の5つのゼロはModbusの仕様であり、7はバイト数です。その後に続く。1はModbusネットワークのクライアントアドレスであり、関係ありません。最初の4つは、使用される機能コードです。2番目の4は、次のバイト数です。最後の4バイトは16進数でコード化された回答であり、doubleに変換する必要があります。これが格納されている配列は、unsignedchar配列です。ここに私がそれをどのように試したかのいくつかの例があります。ここに最初の例があります:
value = (ibuf[9]<<24) + (ibuf[10]<<16) + (ibuf[11]<<8) + ibuf[12];
値は使用されるdouble変数であり、ibufは使用されるchar配列です。ここで2番目のもの:
for(i = 0; i < k; i++)
{
if (i==0)
{
sprintf(ergebnis, "%x%x", ibuf[9], ibuf[10]);
}
else
{
//sprintf(buffer,"%x%x",ibuf[9+i+i], ibuf[10+i+i]);
//strcat( ergebnis, buffer );
sprintf(ergebnis, "0x41b451e8");
sscanf(ergebnis, "%l %lf ", &Value);
}
printf("Ergebnis %s\n", ergebnis);
}
ここでは固定値を使用しましたが、問題は常に16進数から2進数への変換です。私は私が得ることができるすべての助けについてうれしいです。