Qt(C++)將字符串輸入框中的數字字符串轉換成十六進制命令的方法。

最近在做QT開發,需要將QlineEdit中的數字字符串轉換成十六進制命令發送到下位機,

比如 “32” 轉換成 unsinged short (2字節)的十六進制形式  爲 :00 20

又如 “1232”   轉換成 int (4字節)的十六進制形式 爲:00 00 04 D0


/*將字符串轉換成 short 十六進制字符串命令*/

int atoi(char *s);

string strshort_dec2hex(string str)
{
    int a=atoi(str.c_str());
    int s[4]={0,0,0,0},i;
    string hex_str="";
    char c[1];
    for(i=3;i>=0;i--)
    {
        s[i]=(int)(a/(int)pow((double)16,(double)i));
        a-=s[i]*(int)pow((double)16,(double)i);
    }
    for(i=3;i>=0;i--)
    {
        itoa(s[i],c,16);
        if(c[0]>='a')
            c[0]='A'+(c[0]-'a');
        hex_str=hex_str+c;
                if(i==2)
                   hex_str+=" ";
    }
    return hex_str;
}

/*數字字符串轉換成int十六進制形式的命令*/

char *itoa(int num, char *str, int radix);

string strint_dec2hex(string str)
{
    int a=atoi(str.c_str());
    int s[8]={0,0,0,0,0,0,0,0},i;
    string hex_str="";
    char c[1];
    for(i=8;i>0;i--)
    {
        s[i-1]=(int)(a/(int)pow((double)16,(double)(i-1)));
        a-=s[i-1]*(int)pow((double)16,(double)(i-1));
    }
    for(i=8;i>0;)
    {
        itoa(s[i-1],c,16);
        if(c[0]>='a')
            c[0]='A'+(c[0]-'a');
         i--;
        hex_str=hex_str+c;
                if(i%2==0&&i!=0)
                   hex_str+=" ";
    }
    return hex_str;
}

其中,在windows下itoa 和atoi函數都在C標準庫中,但是在linux下我發現標準庫中沒有上述兩個函數,所以 我自己附上了兩個函數的代碼:

int atoi(char s[])

{

int i = 0,sum = 0,sign;    //輸入的數前面可能還有空格或製表符應加判斷

while(' '==s[i]||'\t'==s[i])
{
i++;
}

sign = ('-'==s[i])?-1:1;
if('-'==s[i]||'+'==s[i])
{
i++;
}
while(s[i]!='\0')
{
sum = s[i]-'0'+sum*10;
i++;
}   
return sign*sum;
}




char *itoa(int value, char *string, int radix)
 {
 char tmp[33];
 char *tp = tmp;
 int i;
 unsigned v;
 int sign;
 char *sp;

 if (radix > 36 || radix <= 1)
 {
 //__set_errno(EDOM);
 return 0;
 }

 sign = (radix == 10 && value < 0);
 if (sign)
 v = -value;
 else
 v = (unsigned)value;
 while (v || tp == tmp)
 {
 i = v % radix;
 v = v / radix;
 if (i < 10)
 *tp++ = i+'0';
 else
 *tp++ = i + 'a' - 10;
 }

 if (string == 0)

string = (char *)malloc((tp-tmp)+sign+1);
 sp = string;

 if (sign)
 *sp++ = '-';
 while (tp > tmp)
 *sp++ = *--tp;
 *sp = 0;
 return string;
 }




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章