BYTE,WORD,DWORD的大小及一些特殊的"高低位宏"

一、定義

在VC6.0的Microsoft Visual Studio/VC98/Include/windef.h 裏,定義了BYTE,WORD,DWORD

typedef unsigned long       DWORD;

typedef unsigned char       BYTE;

typedef unsigned short      WORD;

在Visual C++ 6.0中,char型長度爲1字節,short型長度爲2字節,int和long型長度都爲4字節,因此可以認爲BYTE與WORD,DWORD定義的變量分別獲得了1字節,2字節,4字節內存,正與BYTE與WORD,DWORD的字面意義相符。

即:

BYTE=unsigned char(完全等同):       8位

WORD=unsigned short(完全等同):  16位

DWORD=unsigned long(完全等同): 32位

 

 

 

下面是一些平時用得比較少的宏:

二、Window 宏

1.LOBYTE( 從給定16位值中提取低位字節)

BYTE LOBYTE(

  WORD wValue  // value from which low-order byte is retrieved

);

#define LOBYTE(w)   ((BYTE) (w))

如:WORD w=-0x1234;//w在內存中以補碼形式存儲:0xedcc,即0xcc(低地址) 0xed(高地址)

printf("w的低位字節:%x/n",LOBYTE(w));//輸 出:w的低位字節:cc

 

2.HIBYTE( 從給定16位值中提取高位字節)

BYTE HIBYTE(

  WORD wValue  // value from which high-order byte is retrieved

);

#define HIBYTE(w)   ((BYTE) (((WORD) (w) >> 8) & 0xFF))

如:printf("w的高位字節:%x/n",HIBYTE(w));// 輸出:w的高位字節:ed

 

3.LOWORD(從給定32位值中提取低位word)

WORD LOWORD(

  DWORD dwValue  // value from which low-order word is retrieved

);

#define LOWORD(l)   ((WORD) (l))

如: DWORD l = 0x12345678;//l在內存中存儲爲:0x78,0x56,0x34,0x12

printf("l的低位字:%x/n",LOWORD(l));// 輸出:l的低位字:5678

 

4.HIWORD(從給定32位值中提取高位word)

WORD HIWORD(

  DWORD dwValue  // value from which high-order word is retrieved

);

#define HIWORD(l)   ((WORD) (((DWORD) (l) >> 16) & 0xFFFF))

如:printf("l的高位字:%x/n",HIWORD(l));//輸出:l的高位字:1234

5.MAKEWORD(將兩個給定的無符號字符值連接成爲一個16位整數)

WORD MAKEWORD(

  BYTE bLow,  // low-order byte of short value

  BYTE bHigh  // high-order byte of short value

);

#define MAKEWORD(a, b) /

((WORD) (((BYTE) (a)) | ((WORD) ((BYTE) (b))) << 8))

如: BYTE bLow=0x34,bHigh=0x12;

printf("MAKEWORD(%x,%x)=%x/n",bLow,bHigh,MAKEWORD(bLow,bHigh));

輸出結果爲: MAKEWORD(34,12)=1234

 

6.MAKELONG(將兩個給定的16位值連接成爲一個32位整數)

DWORD MAKELONG(

  WORD wLow,  // low-order word of long value

  WORD wHigh  // high-order word of long value

);

#define MAKELONG(a, b) /

    ((LONG) (((WORD) (a)) | ((DWORD) ((WORD) (b))) << 16))

 

如:WORD vLow=0x5678,vHigh=0x1234;

printf("MAKELONG(%x,%x)=%x/n",vLow,vHigh,MAKELONG(vLow,vHigh));

輸出結果:MAKELONG(5678,1234)=12345678

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章