Похоже, вы пытаетесь поменять их местами по одному.Это немного ... безумно.Что вам нужно сделать, это изолировать 2 байта, а затем просто сделать сдвиг.Давайте разберемся с этим:
uint16_t x = 258;
uint16_t hi = (x & 0xff00); // isolate the upper byte with the AND operator
uint16_t lo = (x & 0xff); // isolate the lower byte with the AND operator
Теперь вам нужно просто объединить их в обратном порядке:
uint16_t y = (lo << 8); // shift the lower byte to the high position and assign it to y
y |= (hi >> 8); // OR in the upper half, into the low position
Конечно, это можно сделать за меньшее количество шагов.Например:
uint16_t y = (lo << 8) | (hi >> 8);
Или для замены без использования временных переменных:
uint16_t y = ((x & 0xff) << 8) | ((x & 0xff00) >> 8);