C转移前将char *转换为网络字节顺序

时间:2017-03-31 20:06:56

标签: c string sockets

我正在开展一个必须向服务器发送数据的项目,这个客户端将运行在不同的操作系统上。我在不同的机器上解决了endians的问题,所以我要转换所有的东西' (几乎)网络字节顺序,使用htonl,反之亦然。 另外,我知道对于单个字节,我不需要转换任何内容。但是,我该怎么办char *?例如:

send(sock,(char*)text,sizeof(text));

解决此问题的最佳方法是什么?我应该创建一个'中间功能'拦截这个'发送',然后真的发送这个char数组的char-by-char?如果是这样,我是否需要将每个字符转换为网络字节顺序?我认为不,因为每个字符只有一个字节。 考虑到这一点,如果我创建这个“中间函数”,我就不必再将其转换为网络字节顺序,因为此函数将通过char发送char,因此不需要转换终结者。 我对此有任何建议。

1 个答案:

答案 0 :(得分:0)

我假设您的问题是应用程序层协议(更具体地说是第4级以上的所有内容)都在您的设计控制之下。对于单字节宽度(网络用语中的八位字节宽度)数据,字节序排序没有问题,您无需采取任何特殊措施来适应这种情况。现在,如果字符数据前面加上长度说明符,比如2个八位字节,那么必须一致地处理字节的排序。

使用网络字节排序(big-endian)肯定会填补账单,但是一直使用little-endian。连接两端的字节排序的一致性是关键问题。

如果协议不在你的设计控制之下,那么协议规范应提供有关多字节整数的字节排序问题的指导,你应该遵循它。

相关问题