1
我在寫一個創建內存WAV文件的方法。前4個字節的文件應包含字符「RIFF」,所以我寫這樣的字節:使用memcpy逆序排列
Byte *bytes = (Byte *)malloc(len); // overall length of file
char *RIFF = (char *)'RIFF';
memcpy(&bytes[0], &RIFF, 4);
的問題是,這種寫入前4個字節爲「FFIR」,這要歸功於小-endianness。要解決此問題,我只是在做這樣的:
Byte *bytes = (Byte *)malloc(len);
char *RIFF = (char *)'FFIR';
memcpy(&bytes[0], &RIFF, 4);
這工作,但有越來越memcpy
扭轉它的寫入字節的順序更好看路?
+1,有兩個問題,一個是'char * RIFF =(char *)'RIFF'行',而不是將'RIFF'的地址分配給指針,直接將'RIFF'指定爲指針的**值**。第二個(這就是爲什麼你得到'FFIR'而不是亂碼或崩潰)是行memcpy(&bytes [0],&RIFF,4);'你在哪裏傳遞指針地址而不是指針本身。 – 2011-05-03 19:11:50
我在這裏使用的是'&bytes [0]'而不是'bytes',因爲我必須在字節數組的其他位置進行類似的寫操作。我認爲這就是你所說的「怪異但沒有錯」的意思。 – MusiGenesis 2011-05-03 19:24:32
@MusiGenesis - 並投射'malloc()'調用的結果。 Argubly鑄造結果*是錯誤的,但。這當然是不必要的。 – 2011-05-03 19:25:06