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 博客,转载请注明出处。
- DWORD 和4个char之间的相互转换
- JavaSE_String和char[]之间的相互转换
- string与char*和char[]之间的相互转换
- Cstring 和 DWORD的相互转换
- CTime和DWORD类型的相互转换
- CTime和DWORD类型的相互转换
- CTime和DWORD类型的相互转换
- char* char[] string之间的相互转换
- NSData NSString char *之间 || NSData和NSArray的相互转换
- JNI中String和char之间的相互转换
- DWORD string 的相互转换
- LPCTSTR和char*之间怎样相互转换
- CString、char*、char[]、string、char之间的相互转换
- CString,string,char*之间的相互转换
- char *与string之间的相互转换
- CString string char*之间的相互转换
- char * 与 QString 之间的相互转换
- CString、char*之间的相互转换
- 根据IDC研究,云计算使得全球就业增长
- 关于测试和测试人员
- afxstat_.h(164) : error C2143 syntax error : missing ';' before '*'报错的解决
- CGI实例--表单GET与POST示例
- DedeCMS V5.6 常见问题整理
- DWORD 和4个char之间的相互转换
- 动态油标数据获取以及遍历
- 非阻塞IO 和阻塞IO
- 合并链表
- Godaddy SSL证书部署
- linux g++ 动态库
- 横向技术分析C#、C++和Java优劣
- java字节数组、字符串与字符集理解
- Unity3d游戏场景优化杂谈