2012-02-14 15 views
1
// Works 
    int fnamesize=0; 
    fnamesize=message[0]<<24; 
    fnamesize+=message[1]<<16; 
    fnamesize+=message[2]<<8; 
    fnamesize+=message[3]; 

    // Doesn't work 
    int fsize; 
    memcpy(&fsize,message,sizeof(int)); 

誰かが2番目の理由で機能しない理由を説明できますか?コピー元のメモリmessagechar *です。 printf("fsize is %d,fnamesize is %d",fsize,fnamesize);のようにfnamesizeとfsizeの値をテストしようとすると、fsizeは予期しない値を返しますが、fnamesizeは期待した値を返します。C:文字配列からintにコピー

思考?

答えて

3

これは、endianessのためです。これは、intのバイトのレイアウトを意味します。 Windowsで

、第二の方法は次のように、あなたに反対のバイト順序を持つint型を与える:

fsize=message[3]<<24; 
fsize+=message[2]<<16; 
fsize+=message[1]<<8; 
fsize+=message[0]; 
+0

大丈夫です。 "ネットワークスタックシミュレータ"とプロジェクトの一部を書くことは、ntoh_とhton_を使って作業しています。正しい方向に私を入れてくれてありがとう! – Joseph

+0

私は助けることができる嬉しい:) – MByD

1

に結果を比較し、働くあなたのコード内の配列インデックスの順序を変更してみてください動作しないコードは、 "ビッグエンディアン"と "リトルエンディアン"という用語を参照してください。

関連する問題