一个简单的有关问题:像这样的16进制数怎么转换得到

一个简单的问题:像这样的16进制数如何转换得到?
本帖最后由 alibaren 于 2014-11-25 01:15:15 编辑
下列3个整数(用16进制表示) 如何通过某种运算一次性得到右边的数:
 
  0X1212BE72   ====>0X212BE72*10
  0X2312BE8D   ====>0X312BE8D*100 
  0X3511DDEC  ====>0X511DDEC*1000


.................                            ....................
也就是前面的一个数字N去掉,剩下的组成一个新数乘以10的N次方。
另:求出的数值会变很大 为了防止溢出请问用什么数据类型存储呢

------解决思路----------------------
移位啊

#include <stdio.h>

unsigned int
conv(unsigned int x)
{
    unsigned int i, a, m, n;

    a = x & 0x0FFFFFFF;
    n = x >> 28;

    m = 1;
    for (i = 0; i < n; i++)
    {
        m = m * 10;
    }

    printf("0X%08X===>0X%08X*%u\n", x, a, m);

    return (a * m);
}

int
main(int argc, char *argv[])
{
    unsigned int x;

    x = 0X1212BE72;
    conv(x);
    x = 0X2312BE8D;
    conv(x);
    x = 0X3511DDEC;;
    conv(x);

    return 0;
}

------解决思路----------------------

unsigned int a = 0X1212BE72;
unsigned int b = ( a & 0xF0000000 ) >> 7;
int c [100];
memset( c, 0, sizeof(c) );
int i = b;
unsigned int d = a & 0x0FFFFFFF;
while( d%10 > 0 )
{
   c[b] = d%10;
   d = d/10;
  b++;
}
for( int i=b-1; i>0; i-- ) 
   printf( "%d", c[i] );


------解决思路----------------------
__int64