**
1一个基于c语言的十进制和十六进制进制转换函数
**
(这个函数比较方便移植,不止可以用在qt上。函数已经测试过了,可以支持64位及以下的数据进行转换)(如果有更多位数就把15改成更大的数)
//#include<stdlib.h>
//#include<stdio.h>
//十进制数转换为16进制数
//注意调用函数时一定注意hex_num[16]数组要初始化。否则数组的值是随机的。
//支持32位无符号数,满足扩展帧的要求
void MainWindow:: dec_to_hex( uint32_t num,char *hex_num )
{
char arr[] = "0123456789ABCDEF";
int i = 15;//只支持32位数据,所以这里实际用8个字节即可
int j = 0;
while (num)//num==0则说明转换完毕
{
hex_num[i--] = arr[num % 16]; //对十进制数求余并最终与hextable数组中 的字符匹配
num = num / 16;//i--表示从数组高字节往低字节赋值(为了显示时调换顺序)
}
qDebug() <<i;//调试使用
//假设3个16进制数数,还有13个空位
for(i;i<15;i++ )//将数据整体向低字节对齐
{
hex_num[j]=hex_num[i+1];
j++;
}
}
```cpp
调用示例:
//调用示例
void main
{
char hex_num[16]={0};//这里一定要初始化(计算机的初始值是不确定的,单片机可能是初始为0)
uint32_t i1;
i1=217267949;
//dec_to_hex(217267949,hex_num);
dec_to_hex(i1,hex_num);
qDebug() <<hex_num;//通过调试窗口输出十六进制字符串
QString i3;//定义一个QString类型变量
i3=hex_num;//必须将字符串数组hex_num赋值给QString变量才能在textBrowser显示
textBrowser->append("Successfully_bound_port:" +i3);//通过文本显示器显示字符串(加号是不同变量之间的分割符)
//然后补充一个小知识点textBrowser显示信息有两个函数,一个是 textBrowser->append();
//另一个是:
//ui.resultbrowser->insertPlainText(a1);//输出到textbrowser
//ui.resultbrowser->moveCursor(QTextCursor::End);//将光标移动到当前文字最后
//具体区别还需测试。
}
输出结果
**
2使用qstring进行十进制和十六进制转换
**
//示例
uint32_t i1;
i2=217267949;
qDebug() <<"十进制转16进制----"<< QByteArray::number(i1,16);
//这个还是挺方便的,一行语句就完成了转换,但是显示出来的十六进制是小写,前面那个方法已经成功实现了我的功能,这里就不纠结了,反正也不用这种方法。
输出结果
3:待补充。
在做一个收发Can数据的上位机,应该会处理很多字符串。