2016-10-05 3 views
0

Я пытаюсь выяснить серийную программу с C++. Я отправляю массив char, который состоит из нескольких uint8_t и нескольких uint16_t, которые я пытаюсь разделить и отправить.Unsigned int conversion C++

char buf[3]; 
uint16_t var=1500; 

Какая разница (если таковая имеется) между ними:

buf[0]= var & 0xFF; buf[1]= var >> 8; 

и

buf[0]= (uint8_t)(var & 0xFF); buf[1]= var >> 8; 

Другой конец ожидает 16bit чисел с LSB первого и по какой-то причине я просто не» Думаю, я получаю ожидаемую серийную запись. Я знаю, что существует множество причин, которые могут произойти, но я просто пытаюсь обвести вокруг себя концепцию.

+0

В чем разница? Одна из строк содержит C-стиль для 'uint8_t', а другой - нет. На какой вопрос вы действительно спрашиваете? –

+1

Может ли этот «другой конец» использовать другую консистенцию, чем отправитель? – orphen

+0

Мне любопытно, почему вы делаете 'var & 0xff'. Разве неявное/явное литье уже обрезает наиболее значимые биты? –

ответ

1

Большинство последовательных протоколов требуют данных по заказу большой величины. В этом случае вы должны просто сделать *reinterpret_cast<short*>(buf) = htons(var). Если вам действительно нужен маленький-endian, используйте htole16, определенный в string/endian.h.

+0

Вы правы. Починил это. –

Смежные вопросы