• 11084阅读
  • 19回复

[提问]qt数值转换 [复制链接]

上一主题 下一主题
离线zjfshowtime
 
只看楼主 倒序阅读 楼主  发表于: 2011-04-04
各位高手指教下,qt中怎么将十进制数直接转成十六进制数啊,
离线zjfshowtime
只看该作者 1楼 发表于: 2011-04-04
等各位大神明天指教
离线83888788
只看该作者 2楼 发表于: 2011-04-05
你是要在某个空间中显示、输出还是怎么样?

不是的话就没什么意义,感觉。

所以你肯定是要显示吧
显示是要先转化成字符串的


可以这样

QString::number ( uint n, int base = 10 ) [static]


最好先查一下手册

[ 此帖被83888788在2011-04-05 01:15重新编辑 ]
离线roywillow

只看该作者 3楼 发表于: 2011-04-05
可以使用number()相关的函数,也可以使用.arg()相关的
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线zjfshowtime
只看该作者 4楼 发表于: 2011-04-06
回 2楼(83888788) 的帖子
谢谢你的方法啊,你的方法转换呢成QString确实可以,但是我想用int转换到int,是内部运算用,不需要装换成QString类型,有其他方法么?
离线zjfshowtime
只看该作者 5楼 发表于: 2011-04-06
回 3楼(roywillow) 的帖子
请问能说具体点么?将10进制的int型转为16进制的int
离线83888788
只看该作者 6楼 发表于: 2011-04-06
回 5楼(zjfshowtime) 的帖子
这个就理解不对了

你说的将10进制的int转化成16进制的int只是说让系统默认的以16进制的方式表现它

因为他存的是(0000 1111) 不是 十进制15  也不是 十六进制的 F

你要做的就是把(0000 1111)用16进制显示(即F)

计算机里面存的int只是二进制数(01...)之类的
你说它是10进制,只是说多数(几乎所有)函数默认以10进制输出它,
就是说在输出它的时候可能先采用了我说的那个函数(抑或是别的函数)

个人理解
离线roywillow

只看该作者 7楼 发表于: 2011-04-06
int就是int,不存在什么十进制十六进制的区别,在内存中统一呈现为二进制
只有将int显示为字符串才存在进制问题
只要Int显示出来了,那就不是Int了,而是个string了
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线zjfshowtime
只看该作者 8楼 发表于: 2011-04-07
回 7楼(roywillow) 的帖子
我理解你们的意思,比如说吧十进制的20,我想把它写成是16进制的14,这中间的转换怎么写我只要14就行,而且希望可以运算,也就不是string类型,不分几进制,只是一个转换
离线zjfshowtime
只看该作者 9楼 发表于: 2011-04-07
回 6楼(83888788) 的帖子
对,这是个理解问题,如果我要以16进制的形式显示,而且不希望现实的为string类型,只希望是显示一个整型的
离线dbzhang800

只看该作者 10楼 发表于: 2011-04-07
Re:回 6楼(83888788) 的帖子
引用第9楼zjfshowtime于2011-04-07 10:34发表的 回 6楼(83888788) 的帖子 :
对,这是个理解问题,如果我要以16进制的形式显示,而且不希望现实的为string类型,只希望是显示一个整型的

请先解释你这句话是什么意思
离线83888788
只看该作者 11楼 发表于: 2011-04-07
Re:回 6楼(83888788) 的帖子
引用第9楼zjfshowtime于2011-04-07 10:34发表的 回 6楼(83888788) 的帖子 :
对,这是个理解问题,如果我要以16进制的形式显示,而且不希望现实的为string类型,只希望是显示一个整型的


显示的话,就不存在什么整型的了。都是string
离线roywillow

只看该作者 12楼 发表于: 2011-04-07
如果是说赋值的时候的话,代码中0x开头的整型常量代表十六进制,比如int i = 0xF;
想显示出来成十六进制的形式的话就用QString的number静态函数,比如QString s = QString::number(15, 16);此时s="f"
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线zjfshowtime
只看该作者 13楼 发表于: 2011-04-08
回 10楼(dbzhang800) 的帖子
比如说一个int number = 23;而我想得到的是十六进制的表现形式0x17,也就是17,因为我还要将17拆分继续运算,我自己说的都觉得麻烦
离线83888788
只看该作者 14楼 发表于: 2011-04-08
回 13楼(zjfshowtime) 的帖子
你就运算了再用16进制显示啊!
离线roywillow

只看该作者 15楼 发表于: 2011-04-08
Re:回 10楼(dbzhang800) 的帖子
引用第13楼zjfshowtime于2011-04-08 10:33发表的 回 10楼(dbzhang800) 的帖子 :
比如说一个int number = 23;而我想得到的是十六进制的表现形式0x17,也就是17,因为我还要将17拆分继续运算,我自己说的都觉得麻烦

其实不妨你讲讲打算怎么对0x17进行运算
难道是真的非要基于"17"这个字符串进行?
如果你想获得0x17中的高数位的“1”,那不妨用 (0x17 & 0xF0)>>4 这种算法
如果想获得其中的“7”,(0x17 & 0xF)应该就能解决了
当然你写成(23 & 240)>>0x4和(23 & 15)与上面的形式完全没区别
同一个数的不同进制只是书写形式不同罢了,就像你朋友叫你的名字和直接用身份证号叫你(显然没人这么做吧)没什么本质区别一样

如果你真的做到了无视10进制将任何数据都理解成二进制或八进制或十六进制,那么进制转换什么的都是浮云,那些都是用来以不同形式显示数据的
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线xlttap

只看该作者 16楼 发表于: 2011-04-08
这是我以前写的10进制转换16进制的算法,供参考:

int XLTMath::dec2hex(int dec)
{
    int sum = 0x0;
    if (dec >= 0) { // 0 & positive
        char str[20];
        sprintf(str,"%d",dec);
        int len = strlen(str);
        int *buf = (int*)calloc(len,sizeof(int));
        for (int i = 0; i < len; i++) {
            buf = (dec >> i*4) & 0x0f;
            sum += buf * (int)pow(16,i);
        }
        free(buf);
    } else { // negative
        const int SIZE = (INTSIZE == 2) ? 4 : 8;
        int buf[SIZE];
        int abs_dec = abs(dec);
        for (int i = 0; i < SIZE; i++) {
            buf = (((~abs_dec)+1) >> i*4) & 0x0f;
            sum += buf*(int)pow(16,i);
        }
    }

    return sum;
}
我简单我快乐
离线zjfshowtime
只看该作者 17楼 发表于: 2011-04-11
回 16楼(xlttap) 的帖子
十分感谢你的代码,哈哈!
离线zjfshowtime
只看该作者 18楼 发表于: 2011-04-11
回 15楼(roywillow) 的帖子
谢谢指教,真的太好了!
离线zjfshowtime
只看该作者 19楼 发表于: 2011-04-11
回 15楼(roywillow) 的帖子
十分感谢!
快速回复
限100 字节
 
上一个 下一个