Чтобы отправить данные с прямым порядком байтов, вы можете просто сгенерировать байты вручную:
int write_le(int fd, int16_t val) {
unsigned char val_le[2] = {
val & 0xff, (uint16_t) val >> 8
};
int nwritten = 0, total = 2;
while (nwritten < total) {
int n = write(fd, val_le + nwritten, total - nwritten);
if (n == -1)
return nwritten > 0 ? nwritten : -1;
nwritten += n;
}
return nwritten;
}
Хороший компилятор распознает, что код ничего не делает, и скомпилирует битовую манипуляцию в no-op на платформе с прямым порядком байтов. (См., Например, gcc, генерирующий тот же код для варианта с и без переворота в битах.)
Обратите внимание, что вы не должны игнорировать возвращаемое значение write()
- оно не только может столкнуться с ошибкой, оно также может записать меньше, чем вы дали, в этом случае вы должны повторить запись.