例如“AABBCCDD”的字符串是四个字节的十六进制数,要转化成long 类型的数,该怎么做?谢谢

解决方案 »

  1.   

    long x;
    sscanf("AABBCCDD","%x",&x);
      

  2.   

    char ss[]= "AABBCCDD";
    char *stop;
    long lvalue = strtol(ss,&stop,16);
      

  3.   

    /* Input various data from tokenstring: */
       sscanf( tokenstring, "%s", s );
       sscanf( tokenstring, "%c", &c );
       sscanf( tokenstring, "%d", &i );
       sscanf( tokenstring, "%f", &fp );   /* Output the data read */
       printf( "String    = %s\n", s );
       printf( "Character = %c\n", c );
       printf( "Integer:  = %d\n", i );
       printf( "Real:     = %f\n", fp );或自己做函数转。
      

  4.   


    strtoul可以。自已做的话:long Power(long a, long n)
    {
    int nRet = 1;
    while(n--)
    {
    nRet *= a;
    }
    return nRet;
    }long ConvertHexStrToLong(char * lpszHex)
    {
    long nLen = strlen(lpszHex);
    long nRet = 0;
    long nBitVal = 0;
    for(int i = nLen; i >= 0; i--)
    {
    switch(lpszHex[i])//没有检验是不是在0~F之外
    {
    case 'F': nBitVal = 15;break;
    case 'E': nBitVal = 14;break;
    case 'D': nBitVal = 13;break;
    case 'C': nBitVal = 12;break;
    case 'B': nBitVal = 11;break;
    case 'A': nBitVal = 10;break;
    ...//自已写吧
    }
    nRet += nBitVal * Power(16, i);
    }
    return nRet;
    }
      

  5.   

    用strtol或者strtoul,自己做,没必要!
      

  6.   

    但是用strtol或者strtoul计算"AABBCCDD"的结果跟用附件里计算器计算的结果不一样。不知道为什么。
      

  7.   

    strtoul是符号的,所以还不如strtol好,计算很多结果几乎没有正确的(跟计算器的结果对比)