先看代码,其他啥也不说~~

 

#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个字节,这里强制转换成对一个结构体的引用。从低字节开始,于是可以猜测到结果了吧....