その通りです。 read が の倍数のサイズのデータを返すという保証はありませんsizeof(int)
。お届けできる最小サイズはchar
. ネットワーク経由で整数を受信する際のエンディアンなど、他にも注意すべき問題があります (ネットワーク経由で整数を送信する場合にも当然当てはまります)。
これらの理由から、より簡単な解決策は、メッセージを保存するchar[]
代わりにを使用しint[]
、それを にコピーすることint[]
です。効率が気になる場合は、コードの最適化について心配する前に、これがボトルネックであることを証明してください (コードのプロファイリングを行います)。
また、ネットワークを介してsend
ing とrecv
ing を行っている場合は、TCP などのプロトコルがストリームベースであることを認識してください。つまり、単に文字のストリームを送信するだけであり、メッセージの終わりを検出して必要に応じてフォーマットする何らかの方法を実装する必要があります。 . 一般的な 2 つの方法は、メッセージの長さをヘッダーとして送信するか、特殊文字を使用し'\n'
てメッセージの終わりを知らせることです。また、配列を送信しているので、「|」のようなものを使用できます 要素を分離します。
したがって、メッセージの例は次のようになります: "1|100|239|23|\n"