代码先锋网 代码片段及技术文章聚合

QT QString和十六进制数值字符串、QByteArray和十六进制数值字符串之间的转换,Qt写电脑与单片机串口通讯用

技术标签: QT  串口通讯  数据类型  QString  QByteArray

0特殊的十六进制

1.十六进制数值转字符

1.1 0x31变为"31"

1.1.1 QByteArray原数据

//QByteArray转十六进制格式显示"1">>"31"   0x06>>"06"  10>>"0A"
QByteArray data;
QString ret(data.toHex().toUpper());//toUpper()大写
QString ret(data.toHex());
QString MainWindow::ByteArrayToHexString(QByteArray data){
    QString ret(data.toHex().toUpper());int len = ret.length()/2;//插入空格
for(int i=1;i<len;i++)
{
    ret.insert(2*i+i-1," ");
}
return ret;

1.1.2 int或char等常见数值

int data=1512;  //"05e8"
QString strsend48503=QString("%1").arg(data,4,16,QLatin1Char('0'));//int型或char型都可
data,//原数据
4,   //一共要多少字符
16,  //数据进制
QLatin1Char('0')//左侧不足位补什么字符  
    
    方法2
  int m=0x31;
  QString string;
  string=QString::number(m,16);//31

1.2 0x31变为"1"

1.2.1 QByteArray原数据

  QByteArray byte;
  byte.resize(2);
  byte[0]=0x31;
  byte[1]=0x32;
  QString string =byte;   // string="12"

1.2.2 int或char等常见数值

  int m=0x31;
  QString string;
  string[0]=m;
  qDebug()<<string;  //"1"
  char ms[]={0x31,0x31,0x31,0x31,0x31};
  string=ms;
  qDebug()<<string; //"11111"

2十六进制字符转数值

2.1 "31"变为0x31

2.1.1 QByteArray原数据

先转为Qstring吧   
或者用于计算的话可以直接使用QByteArray计算,使用数组索引的方式QByteArray与普通char一样用
  char ch=0x0C;
  QByteArray string;
  string.resize(5);
  string[0]=0x01;    //01
  string[1]=ch;      //0C
  string[2]=++ch;    //0D
  string[3]=ch&0xF0; //00
  string[4]=ch|0xF0; //FD
  qDebug()<<string.toHex().toUpper();  //"010C0D00FD"

2.1.2 QString

这个比较麻烦,只能用逐个字节比对的方式

/*
描述:把两个十六进制字符一个十六进制字节
'a','A'>>0xAA 
*/
char charToHex(char H,char L)
{
  if((H >= '0') && (H <= '9'))
    H-='0';
  else if((H >= 'A') && (H <= 'F'))
    H=H-'A'+10;
  else H='*';

  if((L >= '0') && (L <= '9'))
    L-='0';
  else if((L >= 'A') && (L <= 'F'))
    L=L-'A'+10;
  else L='*';
  return ((H&0x0F)<<4)|(L&0x0F);
}
/*
描述:把一个十六进制字符串转化为十六进制数数组
"01 15 26 581512">>{0x01,0x15,0x26,0x58,0x15,0x12}
*/
 char* dataTypeConversion::hexStr_To_Hexchar(QString data)
{   //"19885984ac418df"
   static char re[200];
   for(int re_num=0;re_num<200;re_num++)
     {re[re_num]=0;}
   int Lenth,cnt=0;
   data.remove(' ');    //删除字符串中的空格
   data=data.toUpper();
   Lenth=data.length();   //获取长度
   if(Lenth%2==1)
     {
       data+="0";
       Lenth++;
     }
   std::string ch = data.toStdString();
   const char*p = ch.c_str();
   char high = 0, low = 0;
   int i=0;
      for (cnt=0; cnt<Lenth; cnt+=2)
      {

          high = p[cnt];
          low = p[cnt+1];
          re[i++]=charToHex(high,low);
      }
      return re;
}

2.2 "1"变为0x31

2.2.1 QByteArray原数据

QString ret(data.toHex().toUpper());//转为16进制大写  QByteArray.toHex()    转为十六进制字符 '1'>>"31"
/*
描述:把一个十六进制字符串转化为十六进制数数组
"123456">>{0x31,0x32,0x33,0x34,0x35,0x36}
*/
//mode  :2显示0x 0:显示空格
QString dataTypeConversion::strToHexstr(QByteArray data,int mode)
{
  QString ret(data.toHex().toUpper());//转为16进制大写  QByteArray.toHex()    转为十六进制字符 '1'>>"31"
  int len = ret.length()/2;
  if(mode==2)
    {
      ret.insert(0,"0X");
      for(int i=1;i<len;i++)
        {
          ret.insert(4*i+i-1,",0X");//编写格式
        }
    }
  else {
      for(int i=1;i<len;i++)
        {
          ret.insert(2*i+i-1," ");//编写格式
        }
    }
  return ret;
}

2.2.2 QString

数值上直接把QString作为数组计算即可

版权声明:本文为qq_27620407原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_27620407/article/details/102664276

智能推荐

Qt字符串转换为hex十六进制数

1、字符串"A1"转化为0xA1  ...

Qt 进制转换,文本与十六进制的转换(用于串口和网络调试)

前言 在串口调试和TCP或UDP调试中经常会用到进制的转换,文本转换。 一、进制转换 二、文本转换 写在最后 本博文只是我在学习QT的过程中所做的笔记,方便以后查阅实现过程。资料均来自网上,如果有侵权请联系我删除,谢谢。...

QT学习之unicode的十六进制形式转QString的汉字和字符

本质就是在unicode编码找到需要将进行解码的unicode编码,并对每个对应的unicode码进行转换,此法较为简单粗暴,但个人也觉得更加容易理解 //unicode转utf-8 unicode2utf8(QString unicode) { }...

Qt QByteArray或者Char转十六进制 QString

1、QByteArray转十六进制 2、Char转十六进制 3、QString转QByteArray...

猜你喜欢

QT 十进制与十六进制(字符型) 互相转换 -串口编程

串口使用中会经常用到。目前使用到的是QByteArray::number(源数据 ,目标输出的进制)。作下记录,以供日后参考。 十进制转为十六进制(tmp[0] = ‘0x14’) 十六转十进制 另外:QString.toUInt() 可以指定任何进制(如十六进制)输出为十进制 如指定 【输入格式为16进制】的整型数 记录一个组装QByteArray数组命令的过程 - QT...

QT串口发送十六进制给单片机格式问题

读取接收到的数据 发送数据 我的问题 我想从QT发送十六进制数据给单片机,但serial->write(a); 发送函数的类型为QByteArray a; ,所以要转换为十六进制。 可以先定义QString Data = "02 0d 0a";,目的是定义三个QString类型的0x02 0x0d 0x0a,其中0x0d 0x0a为\r\n 没感觉了,有空再补&helli...

Qt使用QtSerialPort发送字符串/十六进制hex

话不多说,直接上代码...

记录- QT QByteArray的十进制与十六进制互相转换

目前使用到的是QByteArray::number(源数据 ,要使用的进制数)。作下记录,以供日后参考。 转制方法有很多,这只是其中一种,有其他QT的进制转换方法,欢迎与作者交流! 十进制转为十六进制 十六转十进制 另外:QString.toUInt() 可以指定十六进制数据输出为十进制 记录一个组装QByteArray数组命令的过程 - QT 串口通信...