У меня есть массив байтов:
uint8_t* data = 10101010 01000001 00000000 00010010 00000000 00000010..........
uint8_t get_U8(uint8_t * data, int* offset)
{
uint8_t tmp = *((uint8_t*)(data + *offset));
*offset += sizeof(uint8_t);
return tmp;
}
uint16_t get_U16(uint8_t* data, int* offset)
{
uint16_t tmp = *((uint16_t*)(data + *offset));
*offset += sizeof(uint16_t);
return tmp;
}
смещение здесь равно 2.
get_U8(data, 0) = 10101010 = 170 ===> OK
get_U8(data, 1) = 01000001 = 65 ===> OK
get_U8(data, 2) = 00000000 = 0 ===> OK
get_U8(data, 3) = 00010010 = 18 ===> OK
, но
get_U16(data, 2) = 4608 ===> NOT OK (should be 18)
4608 = 00010010 00000000
Так что я понимаю, что 2 байтаинвертированы.
Я не понимаю, почему get_U16
инвертирует позицию байтов, и это не проблема с прямым порядком байтов / байтов, потому что здесь это первые 8 бит, инвертированные с 8-секундными битами.
Я просто ожидаю, что uint16_t
просто возьмет 16 бит в заданной позиции и вернет здесь 18.
Может кто-нибудь сказать мне, что я делаю неправильно?