mmioFOURCC

The mmioFOURCC macro converts four characters into a four-character code.

这个宏转换四个字符到一个四字符代码

FOURCC mmioFOURCC(   CHAR ch0,    CHAR ch1,    CHAR ch2,    CHAR ch3   ); 

Parameters

ch0

First character of the four-character code.

ch1

Second character of the four-character code.

ch2

Third character of the four-character code.

ch3

Fourth character of the four-character code.

Return Values

Returns the four-character code created from the given characters.

Remarks

This macro does not check whether the four-character code it returns is valid.

The mmioFOURCC macro is defined as follows:

#define mmioFOURCC(ch0, ch1, ch2, ch3) \      MAKEFOURCC(ch0, ch1, ch2, ch3);    

The MAKEFOURCC macro, in turn, is defined as follows:

#define MAKEFOURCC(ch0, ch1, ch2, ch3)  \      ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) |  \      ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 ));  

Requirements

  Windows NT/2000/XP: Included in Windows NT 3.1 and later.
  Windows 95/98/Me: Included in Windows 95 and later.
  Header: Declared in Mmsystem.h; include Windows.h.


http://msdn.microsoft.com/en-us/library/ms712167



相关代码:


 

mmioFOURCC('W','A','V','E');

/* MMIO macros */
#define mmioFOURCC(ch0, ch1, ch2, ch3) MAKEFOURCC(ch0, ch1, ch2, ch3)

#define MAKEFOURCC(ch0, ch1, ch2, ch3) \
((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) | \
((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 ))

上面翻译时搞不大清楚,但是从这里的代码可以看的很准确,它是把四个字符(注意第一句代码中用的是单引号)转换成一个四字节的DWORD类型的编码.

下面把这个位运算理一下:

'W':八进制是127,十六进制是0x57,十进制是87,表示成二进制是0101 0111

'A':八进制是101,十六进制是0x41,十进制是65,表示成二进制是0100 0001

'V':八进制是126,十六进制是0x56,十进制是86,表示成二进制是0101 0110

'E':八进制是105,十六进制是0x45,十进制是69,表示成二进制是0100 0101

它们都被强制转换为(DWORD)(BYTE)

BYTE,实际就是typedef unsigned char BYTE;

DWORD,实际就是typedef unsigned long DWORD;,这个不重要,关键是DWORD占四字节,重点在这儿.

(DWORD)(BYTE)(ch0):0000 0000 0000 0000 0000 0000 0101 0111

(DWORD)(BYTE)(ch1):0000 0000 0000 0000 0000 0000 0100 0001

(DWORD)(BYTE)(ch2):0000 0000 0000 0000 0000 0000 0101 0110

(DWORD)(BYTE)(ch3):0000 0000 0000 0000 0000 0000 0100 0101


(DWORD)(BYTE)(ch0) :0000 0000 0000 0000 0000 0000 0101 0111 W

((DWORD)(BYTE)(ch1) << 8) :0000 0000 0000 0000 0100 0001 0000 0000 A

((DWORD)(BYTE)(ch2) << 16) :0000 0000 0101 0110 0000 0000 0000 0000 V

((DWORD)(BYTE)(ch3) << 24 ) :0100 0101 0000 0000 0000 0000 0000 0000 E


这样它们的有用的信息各自占了8位,按位或运算后,就变成一个整体了.

但是直观的看,这样顺序又反了,可能还是大头小头作怪吧,这个实在搞不懂哦,好几次了.


下面用一个简单的代码写入文件进行测试.

以下为测试:


 

#include "stdafx.h"
#include "Windows.h"
#include "Mmsystem.h"
#pragma comment(lib, " Winmm.lib")
int main(int argc, char* argv[])
{
printf("Hello World!\n");

FILE * h = fopen("c:\\pp.t","wb+");


DWORD tmp = mmioFOURCC('W','A','V','E');

fwrite(&tmp,sizeof(DWORD),1,h);
fclose(h);
return 0;
}


它会在C盘生成一个文件pp.t,用记事本打开,会显示WAVE,用二进制查看器打开,如下:

mmioFOURCC - 加菲 - 视频会议 - 加菲
 



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值