先看代码,其他啥也不说~~
#include <stdio.h> #include <iostream.h> #include <windows.h> struct MyParam { unsigned char byRegion; unsigned char byGroup; unsigned char byType; unsigned char byIndex; }; void main(void) { UINT dwID=1000; char* pszID=new char[1000]; sprintf(pszID,"%d-%d-%d-%d", ((MyParam&)dwID).byRegion, ((MyParam&)dwID).byGroup, ((MyParam&)dwID).byType, ((MyParam&)dwID).byIndex); cout<<pszID<<endl; }
输出结果:
232 - 3 - 0 - 0
仔细想想,再分析一下:
1000: 00 00 03 E8 (16#)
UINT在WIN32占4个字节,这里强制转换成对一个结构体的引用。从低字节开始,于是可以猜测到结果了吧....