首页 > 编程知识 正文

qt十六进制格式字符串,qt char转十六进制

时间:2023-05-03 09:21:18 阅读:146215 作者:3268

QString专门用于处理字符串,除了包含ASCII编码字符外,还包含各国语言编码。 缺省情况下,QString将所有数据视为utf-8编码。 QByteArray只是用于处理数据,不仅可以处理ASCII编码字符,而且不能处理其他复杂编码,被视为字节流

1:QString转QByteArray

qstringstr('123ABC这是测试); QByteArray byte1=str.toLatin1 (; 根据ASCII编码转换,中文q字节2=str.to utf8 (; 根据Utf-8编码转换,中文qDebug () byte1: ) byte1) byte23360 ) byte 2; QByteArray只能处理ASCII编码字符,因此在utf-8编码中,一个汉字占三个字节。 输出结果:byte1: '123abc? 什么事? ' byte 23360123 ABCxe5xb0x8fxe9xa9xacxe5x93xa5 ' http://ww.Sina.com /

使用toInt ()函数时,第一个参数表示转换提交的状态,第二个参数表示如何读取字符串,默认值为十进制。

分为两种情况。 第一,将str='123 '转换为数值123。 str是十进制字符串QString hexstr='123'bool ok; inthexnum=Hexstr.toint(ok,10 ); //字符串qDebug )表示以十进制读取hexnumendl; 输出hexnum 123第二类:将str='123 '转换为数值123。 str是十六进制字符串QString hexstr='123'bool ok; inthexnum=Hexstr.toint(ok,16 ); //字符串qDebug )表示以十六进制格式读取hexnumendl的输出hexnum 291 2:QString字符串转10进制

QByteArray可以存储十六进制数据,因此只要将Qstring字符依次转换为QByteArray即可。 这里的字符可以是任意的Ascii码。

分为两部分。 第一个,例如字符串str='12 34 ',直接像0x120x34那样发送。 1234第二,str='1234 '用将各字符转换为ascii码的十六进制格式发送。 31 32 33 34第一个,按两个字符分隔字符串,每12个字符转换一次。将Qstring类型转换为QByteArray并发送。 qbytearraymainwindow :3360 get hex value (qstring str ) { QByteArray senddata; int hexdata、lowhexdata; int hexdatalen=0; int len=str.length (; senddata.resize(Len/2 ); char lstr、hstr; for(intI=0; ilen; ({ hstr=str[i].toLatin1 ); if(hstr==' ' ) I; 继续; (I; if(I=len ) break; lstr=str[i].toLatin1 (; hex data=转换hexchar (hstr ); lowhexdata=converthexchar(lstr; if () hexdata==16 )lowhexdata==16 ) ) break; elsehexdata=hex data * 16 lowhexdata; I; 发送数据[ hex datalen ]=(char ) hex数据; hexdatalen; }senddata.resize(HEXdatalen ); 返回发送数据; } char main window :3360转换器hexchar (charch ) if ) ch='9' ) ch='9' ) /修饰字符0-9返回ch-0x 30; elseif () ch='F ' ) ch='F ' ) ) /修饰字符a-f返回ch-' a ' 10; elseif((ch='a ' ) ) )。

amp;& (ch <= 'f')) //限定字符a-f return ch-'a'+10; else return (-1);}例子:发送端按照下面形式发送,接收端也要使用16进制接收,就可以实现16进制收发Qstring str = "12345678ab";QByteArray array = GetHexValue(str);第二种:第二种方式就是我们常见直接转成ASCII码即可,如果要16进制发送,那就使用tohex()函数转成16进制的ASCII码发送。 QString str1 = "abc123"; QByteArray data = str1.toUtf8().toHex(); qDebug()<<data<<endl;---------->>输出data:61 62 63 31 32 33对照ASCII码表如下:


4:QByteArray转QString

方法一:QByteArray array;QString str = QString(array); >>不能显示中文需要显示中文的时候:QString str = QString::fromLocal8Bit(array); >>可以显示中文

5:QByteArray转10进制
  因为QByteArray可以存储的字符串分两种,一种是0-9之间的数值字符,这种字符回来你可以使用toint()函数,或者tohex()函数转。另一种就是里面有0-9,a-f,A-F等有字母字符的时候,就不能直接使用toint()函数,会报错。可以先转tohex(),在转toint()。这里的字符串转16进制类型,就是按照转ASCii码的形式转的。在编程中,里面的源码都是按照转ascii来的 ,计算机就认这个,我们前面提到的把“ab”字符串转成16进制数值ab,是我们自己封装出来的函数,达到自己的目的而已。

第一种:QByteArray里面只有数字符号,不带字母或者其他符号 QByteArray array = "123"; bool ok; qDebug()<<"直接转10进制="<<array.toInt(&ok,10) <<输出 123 <<"先转hex,再转int" <<array.toHex().toInt(&ok,16); <<输出 3224115 ****** ( 123 转ascii== 313233==转int==3224115)第二种:QByteArray带字母或者其他符号,不仅仅是数字字符 QByteArray array = "1a23"; bool ok; qDebug()<<"有字母a直接转10进制="<<array.toInt(&ok,10) <<输出 0 转换失败 <<"先转hex,再转int"<<array.toHex().toInt(&ok,16); <<输出 828453427 ****** ( 1a23 转ascii== 31613233==转int==828453427)QByteArray中存储的数据形式是关键,10进制在通信过程中用到的概率少,绝大多数时候都是16进制在这里只是简单的理解下函数的用法

6:QByteArray转16进制
  其实和上面的转10进制方式类似,16进制传输使我们在项目工程中用到最多的,不管是16进制发送还是16进制接收,都要用到转16进制,有时候转不好就会出现一些问题。QByteArray是一个本身就可以存储16进制的,也可以存储字符串等,所以在使用QByteArray转16进制数据的时候,首先得知道QByteArray里面的数据时什么类型。下面就分情况说明一下:

第一种:发送过来的就是16进制数据,在QByteArray中存储的数据形式如:qbytearray "x00x00x01x11" 这个x00跟0x00是一个意思。所以直接16进制过来的数据就不需要转换,直接使用即可。如果看不惯这种格式,可以在后面加一句tohex(),这个tohex()的功能只是把显示的形式改变了一下,qbytearray "00000111" 。反正我是习惯上面一种,下面这个容易混淆。QByteArray RevByteData = serialPort->readAll(); 对方发送的就是16进制数据RevByteData.toint(&ok,16);16转10 等等一些其他的数据处理操作第二种:发送过来的是字符串格式,不是16进制数据。分两种,一种是直接将字符串str ="112233aabb"转换成11,22,33....这样的16进制形式。一种是转成ascii码16进制形式:31 31 32 32 33 33 61 61 ....转成ASCII码这种就不用累赘说明了,直接tohex()。另外一种方式:步骤:先转成QString类型,然后再使用QString转16进制 QByteArray array = "112233aabb"; QString str = QString(array); QByteArray hex = GetHexValue(str); GetHexValue()在前面QString转16进制中有详细说明。

7:其他的一些常用类型转换

(1)QString转char

QString str="abc";char *ch;ch = str.toLatin1.data();

(2)char转QString

char a='b';QString str;str=QString(a);

(3)QByteArray转char

char *ch; / 不要定义成ch[n];QByteArray byte;ch = byte.data();

(4) char转QByteArray

char *ch;QByteArray byte;byte = QByteArray(ch);

(5)int转QString

int a=10;QString b;b=QString::number(a)

8:关于显示中文
toLatin1、toLocal8Bit,toUtf8都是QString转QByteArray的方法,Latin1代表ASCII,Local8Bit代表unicode,toUtf8将字符串的UTF-8表示形式返回为QByteArray。
UTF-8是一个Unicode编解码器,可以表示Unicode字符串(如QString)中的所有字符。utf-8是在unicode上优化的,简化内存,不浪费内存。

以串口通信为例:发送中文:QString str ="发送中文";ui->seriport.write(str.toUtf8()); 把中文字符转成utf-8格式发送出去接收中文:QByteArray RevByteData = serialPort->readAll();QString str = QString::fromUtf8(RevByteData); //utf8转中文字符ui->tEdit_rev->append(str); //接收字符串,显示中文toLocal8Bit()和fromLocal8Bit()用法一样。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。