Schemer
Schemer

Reputation: 1665

Difference between two C snippets

I am at a loss to explain why these two C snippets do not behave the same way. I am trying to serialize two structs, eh and ah, as a single buffer of bytes (uint8_t). The first code block works, the second does not. I can't figure out the difference. If anyone can explain it to me it would be greatly appreciated.

Block 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++];
}

Block 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;

Upvotes: 0

Views: 77

Answers (1)

MByD
MByD

Reputation: 137322

In the second example you only set the values in two indexes:

  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;
    

Upvotes: 3

Related Questions