牛骨文教育服务平台(让学习变的简单)
博文笔记

Qt(C++)将字符串输入框中的数字字符串转换成十六进制命令的方法。

创建时间:2014-09-06 投稿人: 浏览次数:1813

最近在做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]||" "==s[i])
{
i++;
}

sign = ("-"==s[i])?-1:1;
if("-"==s[i]||"+"==s[i])
{
i++;
}
while(s[i]!="")
{
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;
 }




声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。