Проблема: своп альтернативные байт, как показано ниже:своп альтернативные байт в целое число
Входной сигнал: uint8_t ЬиЕ [4] = {0xab, 0xcd, 0xEF, 0xBA};
Выход: 0xcdababef
У меня есть ниже код делает это, но мне интересно, если есть лучший способ сократить код.
#include <stdint.h>
#define SWAP_16(buf) (((buf & 0xFF00) >> 8) | ((buf & 0x00FF) << 8))
int main()
{
unsigned int value;
int i, j=0;
uint8_t buf[4] = {0,4,0,0};
unsigned int mask = 0xFFFF;
unsigned int tmp_value;
unsigned int size = 4;
for (i = size - 1 ;i >= 0; i--) {
tmp_value |= (buf[j] << 8*i);
j++;
}
value = SWAP_16((tmp_value & (mask << 16)) >> 16) << 16 |
SWAP_16(tmp_value & mask);
return 0;
}
Зачем использовать 'int'? Просто поменяйте байты в массиве .... – 4386427
'#define SWAPPED (b) {b [1], b [0], b [3], b [2]}' ... 'uint8_t bswap [4] = SWAPPED (buf); '..? – txtechhelp
Вы имели в виду '0xcdabbaef', как предполагалось, выход? Если нет, то неясно, каково ваше условие: –