【发布时间】:2017-08-26 05:01:05
【问题描述】:
我正在做一个项目,我必须将数据发送到服务器,并且该客户端将在不同的操作系统上运行。我知道不同机器上字节序的问题,所以我将“一切”(几乎)转换为网络字节顺序,在另一端使用 htonl,反之亦然。 另外,我知道对于单个字节,我不需要转换任何东西。但是,我应该为 char* 做什么?例如:
send(sock,(char*)text,sizeof(text));
解决此问题的最佳方法是什么?我应该创建一个“中间函数”来拦截这个“发送”,然后真的逐个发送这个字符数组吗?如果是这样,我是否需要将每个字符转换为网络字节顺序?我认为不,因为每个字符只有一个字节。 考虑到这一点,如果我创建了这个“中间函数”,我就不必再转换为网络字节顺序了,因为这个函数会逐个字符地发送字符,因此不需要字节序的转换。 我对此有任何建议。
【问题讨论】:
-
您在发送短信吗?然后没有“字节顺序”。文本是单字节的序列,单字节不会有字节顺序问题。除非您有一个每个字符都是多个字节的宽字符串,否则您当然可能会遇到字节顺序问题,并且需要使用预定义的字节顺序。
-
Someprogrammerdude 所说的。文本中的字节序仅适用于每个字符使用多字节值的字符编码,例如 UTF-16 或 UTF-32(因此它们定义了 UTF-16LE/BE 和 UTF-32LE/BE 变体)。大多数文本编码使用 7/8 位值,因此不会出现字节序问题。
-
我没有注意到,但我在发送之前将所有内容都转换为 char,甚至是整数。像这样:短 p_size = htons(3); end(sock, (char*) &p_size, sizeof (p_size), 0);并且我的字符在使用时不是多字节的。我的问题是:做这个typecastm'send'函数在发送之前将char的每个字符转换为一个字节,或者当我这样调用时它'理解'为一个多字节?因为如果是第二种选择,我必须确保两端的字节序相同。
-
text和initialised是如何定义的?如果它是一个指针,它是如何定义和初始化的,如果它仍然是一个指针,如何......