谢,或者是有什么库的,告诉我!串口发来的数据是16进制的,如0x3d.
我要把他转换成10进制,然后处理数据。有什么方法,谢谢!

解决方案 »

  1.   

    1. 每次取2个字符到缓冲区szTmp,
    char szTmp[64];
    int  iTmp;
    sscanf(szTmp, "%X", &iTmp);2. 分别转换2个字符到10进制。
    int i1, i2;
    char ch1, ch2;
    ch1 = szTmp[0];
    if (ch1 >= '0' && ch1 <= '9') i1 = ch1 - '0';
    else if (ch1 >= 'A' && ch1 <= 'F') i1 = ch1 - 'A' + 10;
    else if (ch1 >= 'a' && ch1 <= 'f') i1 = ch1 - 'a' + 10;
    else ch1 = 0;
    // i2 从szTmp[1] 中取得
    ch1 *= 10;
    iTmp = i1 * 10 + i2;
      

  2.   

    16进制数和10进制在内存表示是一样的吧!
    用十进制把它输出不就行了吗?(我也是一知半解,给点意见了)v=0x3d;printf("%u",v);
      

  3.   

    _itoa函数.
    下面摘自msdn.^_^/* ITOA.C: This program converts integers of various
     * sizes to strings in various radixes.
     */#include <stdlib.h>
    #include <stdio.h>void main( void )
    {
       char buffer[20];
       int  i = 3445;
       long l = -344115L;
       unsigned long ul = 1234567890UL;   _itoa( i, buffer, 10 );
       printf( "String of integer %d (radix 10): %s\n", i, buffer );
       _itoa( i, buffer, 16 );
       printf( "String of integer %d (radix 16): 0x%s\n", i, buffer );
       _itoa( i, buffer, 2  );
       printf( "String of integer %d (radix 2): %s\n", i, buffer );   _ltoa( l, buffer, 16 );
       printf( "String of long int %ld (radix 16): 0x%s\n", l, 
                                                        buffer );   _ultoa( ul, buffer, 16 );
       printf( "String of unsigned long %lu (radix 16): 0x%s\n", ul,
                                                        buffer );
    }
    OutputString of integer 3445 (radix 10): 3445
    String of integer 3445 (radix 16): 0xd75
    String of integer 3445 (radix 2): 110101110101
    String of long int -344115 (radix 16): 0xfffabfcd
    String of unsigned long 1234567890 (radix 16): 0x499602d2
      

  4.   

    用字符串转换
    cstring lpstr
    lpstr.format("%d",0x11);
      

  5.   

    是的,数值其实是一样的,只要表示的方法改变就可以了,如果是Socket接受到的,但是你使用Char进行处理则只有自己在转换一次就可以了。没有库的。方法比较简单
    int result=0;
    for(i=0;i<nLen;i++)
    {
    temp=test[i]>64?(test[i]-55):(test[i]-48);
    if(temp<0 || temp>15)
    return 0;
    result=result*16+temp;
    }
      

  6.   

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

  7.   

    串口发过来的数据应该是字符串,正好前些天写了一个,给你看看
    int nSquareX(int x , int n)
    {
    if(x<0) return -1;
    int Result = 1;
    for(int i = 0 ; i < n ; i++)
    Result *= x;
    return Result;
    }int StrHToInt( char *pStrH,int Len)
    {
    int Result = 0 ;
    for(int i = 0,j = Len-1 ; i < Len ; i++,j--)
    {
    char temp[2]={0};
    temp[0] = pStrH[j];
    switch(temp[0]) {
    case 'a':
    case 'A':
    Result += nSquareX(16,i) * 10;
    break;
    case 'b':
    case 'B':
    Result += nSquareX(16,i) * 11;
    break;
    case 'c':
    case 'C':
    Result += nSquareX(16,i) * 12;
    break;
    case 'd':
    case 'D':
    Result += nSquareX(16,i) * 13;
    break;
    case 'e':
    case 'E':
    Result += nSquareX(16,i) * 14;
    break;
    case 'f':
    case 'F':
    Result += nSquareX(16,i) * 15;
    break;
    default:
    if( pStrH[j] < 48 || pStrH[j] > 57)//非0-9的ascii码
    {
    return - 1;
    }
    else
    {
    Result += nSquareX(16,i) * atoi(temp);
    }
    break;
    }
    }
    return Result;
    }