0

これらの2つのCスニペットが同じように動作しない理由を説明するのに迷っています。2つの構造体ehとahを、バイトの単一バッファー(uint8_t)としてシリアル化しようとしています。最初のコードブロックは機能しますが、2番目は機能しません。違いがわかりません。誰かが私にそれを説明することができればそれは大いにありがたいです。

ブロック1:

uint8_t arp_reply_buf[sizeof(eh) + sizeof(ah)];
uint8_t *eh_ptr = (uint8_t*)&eh;
for (int i = 0; i < sizeof(eh); i++)
{
    arp_reply_buf[i] = eh_ptr[i];
}
uint8_t *ah_ptr = (uint8_t*)&ah;
int index = 0;
for (int i = sizeof(eh); i < (sizeof(eh) + sizeof(ah)); i++)
{
    arp_reply_buf[i] = ah_ptr[index++];
}

ブロック2:

uint8_t arp_reply_buf[sizeof(eh) + sizeof(ah)];
arp_reply_buf[0] = *(uint8_t *)&eh;
arp_reply_buf[sizeof(eh)] = *(uint8_t *)&ah;
4

1 に答える 1

3

2番目の例では、2つのインデックスにのみ値を設定します。

  1. arp_reply_buf[0]

    arp_reply_buf[0] = *(uint8_t *)&eh;
    
  2. arp_reply_buf[sizeof(eh)]

    arp_reply_buf[sizeof(eh)] = *(uint8_t *)&ah;
    
于 2012-10-28T01:20:35.653 に答える