2012-02-14 69 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)); 

有人可以解釋爲什麼第二個不起作用嗎?我從複製的內存是char *。當我嘗試測試fnamesize和fsize的值時,如printf("fsize is %d,fnamesize is %d",fsize,fnamesize);,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 2012-02-14 03:59:47

+0

很高興我能幫忙:) – MByD 2012-02-14 04:00:41

1

試着改變你的代碼,工程數組索引的順序,比較結果該代碼不起作用,並查找術語「大端」和「小端」。