Проблема проста: возьмите 32-битное или 64-битное целое число и разделите его для отправки через (обычно) 1-байтовый интерфейс, такой как uart, spi или i2c.
Для этого я могу легко использовать битовую маску и сдвиг, чтобы получить то, что я хочу. Тем не менее, я хочу, чтобы это было переносимым, чтобы оно работало с прямым и прямым порядком байтов, а также для платформ, которые не отбрасывают биты, а поворот через перенос(маскировка избавляет от лишних битов, верно?).
Пример кода:
uint32_t value;
uint8_t buffer[4];
buffer[0] = (value >> 24) & 0xFF;
buffer[1] = (value >> 16) & 0xFF;
buffer[2] = (value >> 8) & 0xFF;
buffer[3] = value & 0xFF;
Я хочу гарантировать, что это работает на любой платформе, которая поддерживает 32-битные целые числа или более. Я не знаю, правильно ли это.
>>
всегда является сдвигом, а не вращением (т. е. он всегда отбрасывает самые правые биты). - person interjay   schedule 18.01.2019union { uint32_t u32; uint8_t u8[4]; } t; t.u32 = value;
- person Giovanni Cerretani   schedule 19.01.2019