構造体で memcpy を使用すると問題が発生します。
次の構造体を検討してください
struct HEADER
{
unsigned int preamble;
unsigned char length;
unsigned char control;
unsigned int destination;
unsigned int source;
unsigned int crc;
}
memcpy を使用して受信バッファーからこの構造体にデータをコピーすると、コピーは問題ありませんが、構造体を次のように再宣言すると:
struct HEADER
{
unsigned int preamble;
unsigned char length;
struct CONTROL control;
unsigned int destination;
unsigned int source;
unsigned int crc;
}
struct CONTROL
{
unsigned dir : 1;
unsigned prm : 1;
unsigned fcb : 1;
unsigned fcb : 1;
unsigned function_code : 4;
}
以前と同じ memcpy コードを使用すると、最初の 2 つの変数 ( preamble と length ) が正常にコピーされます。コントロールが完全にめちゃくちゃになっていて、最後の 3 つの変数が 1 つ上にシフトされています。つまり、crc = 0、source = crc、destination = source... です。
A誰か私に何か良い提案はありますか?