Если машина Linux всегда будет с прямым порядком байтов, а протокол всегда будет с прямым порядком байтов, тогда код работает нормально, и вам не нужно ничего менять.
Если вам по какой-то причине необходимосделав код Linux независимым от байтов, тогда вы будете использовать:
tx_data[0] = ((unsigned int)src_data[0] >> 8) & 0xFF;
tx_data[1] = ((unsigned int)src_data[0] >> 0) & 0xFF;
tx_data[2] = ((unsigned int)src_data[1] >> 8) & 0xFF;
tx_data[3] = ((unsigned int)src_data[1] >> 0) & 0xFF;
Где приведение приведено, чтобы гарантировать, что сдвиги вправо не выполняются для подписанного типа, что вызовет непереносимую реализациюопределенное поведение.
Преимущество сдвигов битов по сравнению с любой другой версией заключается в том, что они работают на уровне абстракции выше аппаратного и порядкового номера, позволяя конкретному компилятору генерировать инструкции для базового доступа к памяти.Код, такой как u16 >> 8
, всегда означает «дать мне младший байт» независимо от того, где этот байт хранится в памяти.