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

转载 2011年07月07日 23:32:12

一、定义

在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

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

一、定义 在VC6.0的Microsoft Visual Studio/VC98/Include/windef.h 里,定义了BYTE,WORD,DWORD typedef unsigned lo...
  • whatday
  • whatday
  • 2016年06月07日 11:13
  • 1504

C++中基本数据类型字节数及取值范围

机器字长:是指计算机进行一次整数运算所能处理的二进制数据的位数(整数运算即定点整数运算)。机器字长也就是运算器进行定点数运算的字长,通常也是CPU内部数据通路的宽度。现在一般为32位即4个字节,也有6...
  • blueangle17
  • blueangle17
  • 2014年05月15日 17:04
  • 2288

使用WORD宏实现查找带格式的文字并复制到特定地方

原来的WORD文档内容是这样的: 1、硬盘出厂后必须经过格式化才能使用。 2、显示器是由监视器与显示适配卡两部分组成的。 ....... 内容类似于带考试试卷上答案的填空题。目前的需求是把答案部...
  • winnyrain
  • winnyrain
  • 2013年07月30日 18:02
  • 4836

字节序(大小端)详解从高低地址和高低位开始理解(转)

字节序(大小端)详解从高低地址和高低位开始理解(转)   一、字节序定义 字节序,顾名思义字节的顺序,再多说两句就是大于一个字节类型的数据在内存中的存放顺序(一个字...
  • humadivinity
  • humadivinity
  • 2016年05月24日 14:29
  • 2704

字节序(大小端)详解从高低地址和高低位开始理解

字节序(大小端)详解从高低地址和高低位开始理解 一、字节序定义 字节序,顾名思义字节的顺序,再多说两句就是大于一个字节类型的数据在内存中的存放顺序(一个字节的数据当然就无需谈顺序的...
  • jk110333
  • jk110333
  • 2015年03月08日 21:20
  • 4500

字节序(大小端)详解从高低地址和高低位开始理解(转)

一、字节序定义 字节序,顾名思义字节的顺序,再多说两句就是大于一个字节类型的数据在内存中的存放顺序(一个字节的数据当然就无需谈顺序的问题了)。 其实大部分人在实际的开发中都很少会直接和字节序打交道...
  • qq845454748
  • qq845454748
  • 2015年11月12日 14:56
  • 172

字节的高低位知识.txt

  • 2009年11月10日 16:17
  • 10KB
  • 下载

C语言如何分离一个数的高低位,如何将2个字节变成一个字节

该文章是我在开发中的一点总结,可能写得并不好,没办法,我也是初入职场的菜鸟一枚,望各位高手多多指教...
  • morixinguan
  • morixinguan
  • 2015年12月19日 10:16
  • 9267

网络字节序与主机字节序 高低位

最近在项目开发过程中,需要在采用JAVA作为语言的服务器与采用C++作为语言的服务器间进行通信,这就涉及到这两种语言间数据类型的转换以及网络字节序与主机字节序的区别。该文主要说说网络字节序和主机字节序...
  • ernest201210
  • ernest201210
  • 2013年03月19日 10:54
  • 4333

c++和java字节高低位的转换

// 参见java.io.DataInputStream // C++写入的字节顺序是从低到高(左低到右高), 而java.io.DataInputStream读取的数据是从高到低(左高...
  • liuxiao723846
  • liuxiao723846
  • 2016年12月07日 18:48
  • 436
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:BYTE,WORD,DWORD的大小及一些特殊的"高低位宏"
举报原因:
原因补充:

(最多只允许输入30个字)