DWORD 和4个char之间的相互转换

来源:互联网 发布:被广联达计价软件覆盖 编辑:程序博客网 时间:2024/05/16 07:00

DWORD -> 4 Char:

const static DWORD  kCmdRefreshUI = 'ABCD';在内存中是以DCBA的方式存的: 

直接把内存拷贝过来是倒序的:DCBA,反转就可以了。
(注意这个小端机器,大端机器就不需要反转,上图右边是高位地址)。
memcpy(buffer,&kCmdRefreshUI,sizeof(DWORD));string cmd = string(buffer);reverse(cmd.begin(),cmd.end());

 4 Char -> DWORD: 

开始操作之前buffer里面是"ABCD",因为我们是小端机器,所以我们期望转成功之后内存显示为"ABCD"。DWORD是unsigned long类型,是4*8位的,就是说每一个8位对应一个字母。一次性赋值比较困难,我们可以一次赋值一个char,用位 “|” 操作就可以把Char拷贝到对应的8 位里面,因为"|"是“有一则一”。赋值完一个字符之后,我们可以把DWORD里面还未赋值的字节位位移过来再次赋值,这个是位移操作">>" "<<"的强项,具体用到哪个需要看我们先赋值高位还是低位。我用的最先赋值高位,然后DWORD依次向左移一个8 位,在赋值下一个8位。见下图:
printf("%08x\n",tmpRCcmd<< 0);tmpRCcmd = (tmpRCcmd << 0 )| buffer[3];  printf("%08x\n",tmpRCcmd<<8);tmpRCcmd = (tmpRCcmd << 8 )| buffer[2]; printf("%08x\n",tmpRCcmd<<8);tmpRCcmd = (tmpRCcmd << 8 )| buffer[1]; printf("%08x\n",tmpRCcmd<<8);tmpRCcmd = (tmpRCcmd << 8 )| buffer[0]; printf("%08x\n",tmpRCcmd);
大小端机器解释: http://www.360doc.com/content/11/1014/08/1317564_156031044.shtml
 
 
LCL_data原创与CSDN 博客,转载请注明出处。
原创粉丝点击