是否需要转换字符串的字节顺序?

时间:2013-04-08 11:14:15

标签: c endianness

发送和接收字符串时是否需要转换为网络/主机字节顺序。可用的函数(例如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';

2 个答案:

答案 0 :(得分:7)

这取决于字符串的编码。

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

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

答案 1 :(得分:3)

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