3

发送和接收字符串时是否需要转换为网络/主机字节顺序。可用的函数(例如 htons())仅适用于 16 位和 32 位整数。我也知道一个 char 不应该有所作为的事实,一般来说,它是一个字节大。但是字符串呢?

以下是代码片段

 int len; recv(fd, &len, sizeof (int), 0); 
 len = ntohl(len);

 char* string = malloc(sizeof (char) * (len + 1)); 
 int received = recv(fd, string, sizeof (char) * len, 0); 
 string[len] = '\0';
4

2 回答 2

8

这取决于字符串的编码。

如果它是面向字节的格式(普通的旧 ASCII 或 UTF-8),那么没关系。

如果它使用大于单个字节的“代码点”,那么它很重要。

于 2013-04-08T11:16:34.200 回答
5

C 字符串只是一个单字节值的数组,约定使用单字节特殊值来终止它们,因此没有什么可以交换的。Shorts 和 int 是多个字节值,它们根据硬件要求以不同的方式存储,因此需要标准化它们在网络上的存储顺序(以防接收器具有不同的硬件架构)。

于 2013-04-08T11:16:38.970 回答