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

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);
 
 
LCL_data原创与CSDN 博客,转载请注明出处。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值