不罗嗦,直接上代码(主要用数字除以16的商和对16取余进行判断,这个不是最高效的方法,在此抛砖引玉):

 1 unsigned char* CGetHexStringDlg::TQ_GetHexStringEx(unsigned int nNumber, unsigned int nCount)
 2 {
 3     unsigned char* pBuff = new unsigned char[nCount];
 4     memset(pBuff, '0', nCount);            //所有位置'0'
 5 
 6     static const char hex_map[] = "0123456789ABCDEF";
 7 
 8     int nRemainder    = 0;            //除16的余数
 9     int nConsult    = 0;            //除16的商
10     int nPos        = nCount - 1;    //指针位置
11     int nTimes        = 0;            //运算次数
12 
13     while (nPos >= 0)
14     {
15         nRemainder    = nNumber%16;
16         nConsult    = nNumber/16;
17 
18         if (nRemainder == 0)        //余数为0
19         {
20             if (nConsult != 0)        //商不为0
21             {
22                 if (nConsult >= 16)
23                 {
24                     nNumber = nNumber/16;
25                     nPos--;
26                 }
27                 else
28                 {
29                     nPos--;
30                     pBuff[nPos] = hex_map[nConsult];
31                     break;
32                 }
33             }
34             else                    //nNumber为0
35             {
36                 if (nTimes == 0)    //nNumber为0且运算次数为1
37                 {
38                     pBuff[nPos] = hex_map[0];
39                     break;
40                 }
41                 else
42                     break;
43             }
44         }
45         else
46         {
47             pBuff[nPos] = hex_map[nRemainder];
48             nNumber        = nNumber - nRemainder;
49         }
50 
51         nTimes++;
52     }
53 
54     pBuff[nCount] = NULL;
55 
56     return pBuff;
57 }
posted on 2012-07-05 14:08  lastrobber  阅读(238)  评论(0编辑  收藏  举报