Byte 微控制器和微处理器之间的字节顺序问题?

Byte 微控制器和微处理器之间的字节顺序问题?,byte,microcontroller,endianness,microprocessors,Byte,Microcontroller,Endianness,Microprocessors,我的主机是STM32l100“Little Enidian”,它连接到网络处理器LON:FT5000“Big Enidian”,通过UART进行通信,如何克服Enidian中的差异问题。我知道的一种解决方案是,在发送和接收之前交换位,任何标准解决方案,由于我的应用程序涉及嵌套结构和枚举)网络协议应定义endianness。例如,TCP/IP和Modbus是big-endian。而像DeviceNet这样的CIP协议是小端的。如果您正在创建自己的协议,那么请选择最方便的端点 网络端点上运行的软件应

我的主机是STM32l100“Little Enidian”,它连接到网络处理器LON:FT5000“Big Enidian”,通过UART进行通信,如何克服Enidian中的差异问题。我知道的一种解决方案是,在发送和接收之前交换位,任何标准解决方案,由于我的应用程序涉及嵌套结构和枚举)

网络协议应定义endianness。例如,TCP/IP和Modbus是big-endian。而像DeviceNet这样的CIP协议是小端的。如果您正在创建自己的协议,那么请选择最方便的端点

网络端点上运行的软件应适当转换数据。请注意,这可能意味着交换字节,而不是交换位

有关此摘录的更多信息,请参阅

与网络相关联的endianness问题的常见解决方案是定义一组四个预处理器宏,如清单1所示。这些宏如下所示:

htons():将16位无符号值的字节从处理器顺序重新排序为网络顺序。宏名称可以读取为“主机到网络短”

htonl():将32位无符号值的字节从处理器顺序重新排序为网络顺序。宏名称可以读取为“主机到网络长”

ntohs():将16位无符号值的字节从网络顺序重新排序为处理器顺序。宏名称可以读为“网络到主机短”

ntohl():将32位无符号值的字节从网络顺序重新排序为处理器顺序。宏名称可以读取为“网络到主机长”


只需定义处理器之间的接口,并编写符合该定义的代码。