2013-04-08 88 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字符串只是一個字節值的數組,具有一個字節特殊值的約定來終止它們,因此沒有任何交換。短片和整數是多個字節值,根據硬件需求存儲的方式不同,因此需要在整個網絡中對存儲順序進行規範化(如果接收器具有不同的硬件架構)。