My Host是STM32l100“Little Enidian”连接到网络处理器LON:FT5000“Big Enidian”,通过UART进行通信,如何在Enidians中解决这个差异问题。我知道一个解决方案,交换位在发送和接收之前,任何标准解决方案,因为我的应用程序涉及嵌套结构和枚举)
答案 0 :(得分:1)
网络协议应定义字节序。例如,TCP / IP和Modbus是大端。虽然DeviceNet等CIP协议是小端的。如果您正在创建自己的协议,请选择最方便的字节顺序。
网络端点上运行的软件应该适当地转换数据。请注意,这可能意味着交换字节而不是交换位。
有关详情,请参阅Introduction to Endianness,包括此摘录。
与网络相关联的字节序问题的一个常见解决方案是定义一组四个预处理器宏,如清单1所示。这些宏如下所示:
htons():将16位无符号值的字节从处理器顺序重新排序到网络顺序。可以读取宏名称"托管网络短路。"
htonl():将32位无符号值的字节从处理器顺序重新排序到网络顺序。宏名称可以读取"托管到网络很长。"
ntohs():将16位无符号值的字节从网络顺序重新排序到处理器顺序。宏名称可以读取"网络到主机短。"
ntohl():将32位无符号值的字节从网络顺序重新排序到处理器顺序。宏名称可以读取"网络到主机长。"