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;
 }




  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值