※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.110.117.10
※ 編輯: Mewra 來自: 140.110.117.10 (03/11 11:08)
※ 編輯: Mewra 來自: 140.110.117.10 (03/11 11:39)
※ 編輯: Mewra 來自: 140.110.117.10 (03/11 11:45)
Hi,
日前有一個wav檔, 我將其header資訊都拿掉留下data部份 :
FILE *fp = fopen( "1.wav", "rb" );
BYTE A[4];
DWORD B;
short int C;
long int D;
char* E;
char* F;
依序將header資訊讀進A,B,C,D內, 原本該有12個資訊,不過會太長故只列出4個.
fread( A, sizeof( BYTE ), 4, fp );
fread( &B, sizeof( DWORD ), 1, fp );
fread( &C, sizeof( short ), 1, fp );
fread( &D, sizeof( long ), 1, fp );
E = (char *)malloc( length of E );
E是剩餘的部份, 也就是data部份.
F = (char *)malloc( 4+1+1+1+length of E );
這時若想將A,B,C,D,E照原來順序裝進F內, 也就是全部轉換成char後裝進去,
則BYTE,DWORD,short int,long int這些型態轉成char後會跟原本header資訊一樣嗎?
for( int i = 0 ; i < 4; i++ )
F[i] = (char)A[i];
F[4] = (char)B; // 這不知道該怎麼轉
F[5] = (char)C; // short int 轉 char, 或該用itoa轉成2進位?
F[6] = (char)D; // long int 轉 char, 或該用ltoa轉2進位?
for( int i = 0 ; i < length of E ; i++ )
F[7+i] = E[i];
如果將F存成另一個2.wav檔,檔案大小會跟原本1.wav一樣嗎?
還有DWORD B是32bits的,也就是4bytes,但是在fread時只要讀進一個元素,
BYTE A[4]也是4bytes,但是fread時要讀進四個元素,這樣我轉成char寫到
F內,A跟B的大小不會有問題嗎?
--