3

文字列を送受信するときに、ネットワーク/ホストのバイト順に変換する必要がありますか? 利用可能な関数 (htons() など) は、16 ビットと 32 ビットの整数でのみ機能します。また、一般的には1バイトの大きさであるため、単一の文字が違いを生むべきではないという事実も知っています。しかし、文字列はどうですか?

以下はコードスニペットです

 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) であれば問題ありません。

1バイトより大きい「コードポイント」を使用している場合、はい、それは重要です。

于 2013-04-08T11:16:34.200 に答える
5

C 文字列は、それらを終了するための 1 バイトの特別な値の慣例を使用した 1 バイト値の単なる配列であるため、スワップするものは何もありません。short と int は複数のバイト値であり、ハードウェア要件に応じて異なる方法で格納されるため、ネットワーク全体で格納順序を正規化する必要があります (受信側のハードウェア アーキテクチャが異なる場合)。

于 2013-04-08T11:16:38.970 に答える