发新话题
打印

[c/c++] Wave头文件中看不懂的代码

Wave头文件中看不懂的代码

最近在一网站上看见一个Wave头文件的代码,可是其中有几句代码我不知道是什么意思,请大虾们帮我解释一下。

代码为:

CreateWav(WORD wChannels, WORD wResolution, long lRate, String strFileName)

{  typedef struct  _TWavHeader

    {  long  rId;

        long  rLen;

        long   wId;
        long   fId;
        long   fLen;
        WORD   wFormatTag;
        WORD   nChannels;
        nSamplesPerSec;
        long   nAvgBytesPerSec;
        WORD   nBlockAlign;
        WORD   wBitsPerSample;
        long   dId;
        long   wSampleLength;
        }TWavHeader;
        TWavHeader   wh;
        wh.rId   =   0x46464952;
        wh.rLen   =   36;
        wh.wId   =   0x45564157;
        wh.fId   =   0x20746d66;
        wh.fLen   =   16;
        wh.wFormatTag   =   1;
        wh.nChannels   =   wChannels;
        wh.nSamplesPerSec   =   lRate;
        wh.nAvgBytesPerSec =   wChannels*lRate*(wResolution / 8);
        wh.nAvgBytesPerSec =  wChannels*lRate*wResolution / 8);
        wh.wBitsPerSample   =   wResolution;
        wh.dId   =   0x61746164;
        wh.wSampleLength   =   0;
        int nHandle  = FileCreate(strFileName);
        FileSeek(nHandle, 0,0);
        FileWrite(nHandle, &wh, sizeof(wh));
        FileClose(nHandle);
}在这些代码里面,用红色标记的几句我看不懂是什么意思,尤其是那几个数字,不知道是什么意思。我看过Wav格式,wh.rId、wh.wId、wh.fId、wh.dId应该都为字符串常量才对,不知道这些数字与那些字符串之间有什么联系

love you forever

TOP

以0x开头表示16进制,我也经常这样表示,但是有人说,这样表示容易让人不理解,不如写成10进制或者字符。
print pack( 'H*', '436e616e67656c');
http://renark.huhoo.net/crypt.cgi

TOP

楼上正解
Once upon a man.

TOP

也就是说,是用一个十六进制的数来表示一个字符串是吧?这个十六进制数就是那个字符串在内存中的二进制表示是吧?
love you forever

TOP

学习了呵呵
呼吸的是如此的自然,即使是狼也感觉不到

TOP

发新话题