2013-04-08 95 views
2

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

下面是一个代码段

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'; 
+0

一个普通的ascii字符串或unicode? – Joe 2013-04-08 11:15:53

回答

6

这取决于字符串的编码。

如果它是一个面向字节的格式(普通的旧的ASCII或UTF-8),那么它并不重要。

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

2

C字符串只是一个字节值的数组,具有一个字节特殊值的约定来终止它们,因此没有任何交换。短片和整数是多个字节值,根据硬件需求存储的方式不同,因此需要在整个网络中对存储顺序进行规范化(如果接收器具有不同的硬件架构)。