用它_tcstol 行吗?  我试了一下 只能转换成正数 如  _tcstol(“aa”,NULL,16)==170  但_tcstol(“ffffffff”,NULL,16)==LONG.MAX 不等于-1

解决方案 »

  1.   

    unsigned int ui = _tcstoul("ffffffff",NULL,16);
    int result = (int)ui;     //如果最高位为一,还可以写成    result = (int)(~ui) - 1 
      

  2.   

    将"ffffffff"转成0xffffffff容易吧,存进一个int变量就是-1了。
      

  3.   

    int
    parse( char *strtext, unsigned char *binbuf )
    {
    size_t l = strlen( strtext );
    int thelen = 0;
    size_t i;
    unsigned char a;
    unsigned short t; for( i = 0; i < l; i++ )
    {
    if( XIEGANG == strtext[ i ] )
    {
    do
    {
    strtext[ i ] = 0x20;
    i++;
    } while( 0x0a != strtext[ i ] && 0x0d != strtext[ i ] && 0x00 != strtext[ i ] );
    }
    } for( i = 0; i < l; i++ )
    {
    if( ( strtext[ i ] >= '0' && strtext[ i ] <= '9' ) ||
    ( strtext[ i ] >= 'A' && strtext[ i ] <= 'F' ) ||
    ( strtext[ i ] >= 'a' && strtext[ i ] <= 'f' ) )
    {
    if( strtext[ i ] >= '0' && strtext[ i ] <= '9' )
    a = strtext[ i ] - '0';
    if( strtext[ i ] >= 'A' && strtext[ i ] <= 'F' )
    a = strtext[ i ] - 'A' + 10;
    if( strtext[ i ] >= 'a' && strtext[ i ] <= 'f' )
    a = strtext[ i ] - 'a' + 10; thelen++; if( thelen % 2 ) //如果是第奇数个1,3,5
    {
    t = a;
    }
    else
    {
    t <<= 4;
    t += a;
    *( binbuf + ( thelen / 2 ) - 1 ) = ( unsigned char )t;
    }
    }
    }
    return thelen / 2;
    }int i;
    parse( "ffffffff", ( unsigned char * ) &i );printf( "%d", i );
      

  4.   

    int a = 0xfffffff;
    if(a == -1)
    {
            //会执行道这里。
    }
    else
    {
    }
      

  5.   


    写错了,应该是 result = -(int)~ui -1  ,也就是result = -((int)~ui +1) ,这牵扯到补码的计算,罗嗦了,还是直接强制转换来得快。
      

  6.   

    我用swscanf_s 解决了问题  谢谢各位哈!