关于QT内部16进制、十进制、QByteArray,QString
QT里面的数据转化成十六进制比较麻烦,其他的int或者byte等型都有专门的函数,而十六进制没有特定的函数去转化,这我在具体的项目中已经解决(参考网上大神)->小项目程序
QT里面虽然有什么QString str; str.toInt();等函数,但是用不好的话,会出很大的问题。
QByteArray:这个东西可以存放很多数据,16进制的数据、字符串类的数据等。
下面这个data接受的是16进制数据,现在想显示出来就得转化成QString,然后再转化成int类型用于计算
QByteArray data=tcpSocket->readAll(); //接受16进制
QString p = data.toHex(); ui->clearLineEdit->setText(p); //转化成Qstring
data.toInt(,) //转化成int
注意:data.toInt(),直接使用不行!
接下来是接受字符串的转化,
1 QByteArray data=tcpSocket->readAll(); //接受的是字符串
QString p = QString(data); //直接转化就行了
最后是十进制转化成十六进制的问题(主要用在串口和TCP上面),下面程序有几种表述:
1.char p[3]={0x11,0xab,0x0b}; 把里面的数据转化成0x11ab0b发送!
2.int p[3] = {170,170,170}; 把里面数据转化成0xaaaaaa发送!
实现的功能都是一样的,第二种简单一点,下面以第二种为例,第一种类似!
QString a1;
for(int j=;j<;j++)
{
if(my_class->g_data[j]<)
a1+=''+QString::number(my_class->g_data[j], ).toUpper();//防止有0x0a,程序会转换成'a',我们要的是转换成'0a'
else a1+=QString::number(my_class->g_data[j], ).toUpper();
}
//将字符型进制转化为16进制
97 QByteArray MainWindow::QString2Hex(QString str)
98 {
99 QByteArray senddata;
100 int hexdata,lowhexdata;
101 int hexdatalen = 0;
102 int len = str.length();
103 senddata.resize(len/2);
104 char lstr,hstr;
105 for(int i=0; i<len; )
106 {
107 hstr=str[i].toLatin1(); //字符型
108 if(hstr == ' ')
109 {
110 i++;
111 continue;
112 }
113 i++;
114 if(i >= len)
115 break;
116 lstr = str[i].toLatin1();
117 hexdata = ConvertHexChar(hstr);
118 lowhexdata = ConvertHexChar(lstr);
119 if((hexdata == 16) || (lowhexdata == 16))
120 break;
121 else
122 hexdata = hexdata*16+lowhexdata;
123 i++;
124 senddata[hexdatalen] = (char)hexdata;
125 hexdatalen++;
126 }
127 senddata.resize(hexdatalen);
128 return senddata;
129 }
130 //将1-9 a-f字符转化为对应的整数
131 int MainWindow::ConvertHexChar(char ch)
132 {
133 if((ch >= '0') && (ch <= '9'))
134 return ch-'0';
135 else if((ch >= 'A') && (ch <= 'F'))
136 return ch-'A'+10;
137 else if((ch >= 'a') && (ch <= 'f'))
138 return ch-'a'+10;
139 else return (-1);
140 }
上面的程序就是先转换成16进制的QString,千万别写直接number()没有里面参数的转换!
这是我写TCP发送程序的小小总结,网上哟很多这种资料,但是有很多不适合,总结一下,QT里面的数据转换一定要明确进制和类型,其次是调用函数里面参数写具体!
关于QT内部16进制、十进制、QByteArray,QString的更多相关文章
- QT中16进制字符串转汉字
最经在研究AT指令接受短信,短信是unicode编码,接受后需要根据系统的编码方案进行相关的转码比如接受到了一串字符4F60597D,它是“你好”的unicode编码,一个unicode编码占两个字节 ...
- Qt实现16进制unicode转utf-8以及国际音标编码问题
由于项目需要,需要对网络资源进行解码.遇到编码问题.研究了下基本编码原理.于是有了下面两个通用代码 1. 16进制unicode转换为utf-8中文显示 QString unicodeToUtf_8( ...
- Qt 将字符串转成16进制显示
最近项目用到了需要将字符串转换成16进制显示.这玩意折腾了一上午. 首先,数据块内容 struct UserData { char Head[3] = {'X','J','J'}; char Flag ...
- java byte数组与16进制间的相互转换
java byte数组与16进制间的相互转换 CreationTime--2018年6月11日15点34分 Author:Marydon 1.准备工作 import java.util.Array ...
- QT 串口通信 数据16进制发送
在QT中进行串口通信时,很多情况要用到发送16进制的数据.从网上找来了一段代码测试能用: static QByteArray QString2Hex(QString str) { QByteArray ...
- 16进制字符串转QByteArray,char转16进制字符串
直接上代码,看代码你们就懂了 1.16进制QString转QByteArray QString str = "01 a5 1e 02"; QByteArray tmpBy; Str ...
- python经常使用的十进制、16进制、字符串、字节串之间的转换(长期更新帖)
进行协议解析时.总是会遇到各种各样的数据转换的问题,从二进制到十进制,从字节串到整数等等 废话不多上.直接上样例 整数之间的进制转换: 10进制转16进制: hex(16) ==> 0x10 ...
- python常用的十进制、16进制、字符串、字节串之间的转换
进行协议解析时,总是会遇到各种各样的数据转换的问题,从二进制到十进制,从字节串到整数等等 废话不多上,直接上例子 整数之间的进制转换: 10进制转16进制: hex(16) ==> 0x10 ...
- [参考]ASCII对照表 及 字符与二进制、十进制、16进制之间的转化(C/C++)
第1节 ASCII码对照表 1.1 ASCII控制字符 1.2 ASCII可显示字符 第2节字符的进制转换 2.1 获取字符(8位)的上四位和下四位 2.2 获取字符(上表中的‘图形’)所对应的十六进 ...
随机推荐
- 51Nod:1085 背包问题
1085 背包问题 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 在N件物品取出若干件放在容量为W的背包里,每件物品的体积为W1,W2--Wn(Wi为 ...
- JS Array.filter()方法
1.filter()接收的函数可以有多个参数.通常我们只使用第一个参数,第二参数和第三个参数表示元素的位置和数组本身: //去重 var arr = ["1", "2&q ...
- Linux下rsync命令使用总结
一.rsync的概述 rsync是类unix系统下的数据镜像备份工具,从软件的命名上就可以看出来了——remote sync.rsync是Linux系统下的文件同步和数据传输工具,它采用“rsync” ...
- linux系统的启动过程及系统初始化
(其中/etc/inittab是一个很重要的文件,值得细究http://www.2cto.com/os/201108/98426.html) 其开头的446字节内容特指为"主引导记录&quo ...
- servlet / jsp(一)
2016-03-25 11:34:14 一.实现一个简单的servlet程序 Servlet是在服务器端运行的小程序,这是一个很广泛的概念,并没有说是在web服务器端运行的小程序,除了在web服务器上 ...
- nyoj 表达式求值
35-表达式求值 内存限制:64MB 时间限制:3000ms Special Judge: Noaccepted:19 submit:26 题目描述: ACM队的mdd想做一个计算器,但是,他要做的不 ...
- telinit:Did not receive a reply.Possible causes include:the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired
问题: Enabling /etc/fstab swaps: [ok]telinit:Did not receive a reply.Possible causes include:the remot ...
- POJ2559最大矩形面积——单调栈
题目:http://poj.org/problem?id=2559 #include<iostream> #include<cstdio> using namespace st ...
- ML(1): 入门理论
机器学习相关的文章太多,选取一篇本人认为最赞的,copy文章中部分经典供自己学习,摘抄至 http://www.cnblogs.com/subconscious/p/4107357.html#firs ...
- ncnn编译安装-20190415
ncnn编译安装 1.git clone https://github.com/Tencent/ncnn 2.按照wiki说明来编译,根据需要,选择不同的编译方式.在ncnn/CMakeLists.t ...