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原创与优快云 博客,转载请注明出处。