2011-05-03 83 views
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扭轉它的寫入字節的順序更好看路?

回答

4

你正在用指針(和一些奇怪的但沒有錯誤的東西)做一些壞事。試試這個:

Byte *bytes = malloc(len); // overall length of file 
char *RIFF = "RIFF"; 
memcpy(bytes, RIFF, 4); 

它會正常工作。

+0

+1,有兩個問題,一個是'char * RIFF =(char *)'RIFF'行',而不是將'RIFF'的地址分配給指針,直接將'RIFF'指定爲指針的**值**。第二個(這就是爲什麼你得到'FFIR'而不是亂碼或崩潰)是行memcpy(&bytes [0],&RIFF,4);'你在哪裏傳遞指針地址而不是指針本身。 – 2011-05-03 19:11:50

+0

我在這裏使用的是'&bytes [0]'而不是'bytes',因爲我必須在字節數組的其他位置進行類似的寫操作。我認爲這就是你所說的「怪異但沒有錯」的意思。 – MusiGenesis 2011-05-03 19:24:32

+0

@MusiGenesis - 並投射'malloc()'調用的結果。 Argubly鑄造結果*是錯誤的,但。這當然是不必要的。 – 2011-05-03 19:25:06