首页 > 解决方案 > 如何以小端顺序C发送数据

问题描述

我正在与需要我发送 2 个有符号字节的电路板通信。


在此处输入图像描述 我需要发送 的数据类型说明在此处输入图像描述

我需要按位操作还是可以只发送 16 位整数,如下所示?

int16_t rc_min_angle = -90; 
int16_t rc_max_angle = 120;

write(fd, &rc_min_angle, 2); 
write(fd, &rc_max_angle, 2);

标签: cendianness

解决方案


int16_t具有正确的大小,但可能是也可能不是正确的字节序。为了确保小端顺序使用宏,例如来自endian.h的宏:

#define _BSD_SOURCE
#include <endian.h>

...

uint16_t ec_min_angle_le = htole16(ec_min_angle);
uint16_t ec_max_angle_le = htole16(ec_max_angle);

write(fd, &ec_min_angle_le, 2);
write(fd, &ec_max_angle_le, 2);

这里htole16代表“host to little endian 16-bit”。它将主机的本机字节序转换为小字节序:如果机器是大字节序,则交换字节;如果它是小端,则它是无操作的。

另请注意,您将值的地址传递给write(),而不是值本身。遗憾的是,我们不能内联调用和 write write(fd, htole16(ec_min_angle_le), 2)


推荐阅读