广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言中QString与QByteArray互相转换的方法
  • 693
分享到

C语言中QString与QByteArray互相转换的方法

C语言QString与QByteArrayQStringQByteArray 2023-05-20 11:05:16 693人浏览 独家记忆
摘要

目录[1] QString与QByteArray互相转换的方法QString转QByteArray方法QByteArray转QString方法QByteArray类同样不以&rsqu

[1] QString与QByteArray互相转换的方法

先要说的是QString。

之所以把QString单独拿出来,是因为string是很常用的一个数据结构,甚至在很多语言中,比如javascript,都是把string作为一种同int等一样的基本数据结构来实现的。

每一个GUI程序都需要string,这些string可以用在界面上的提示语,也可以用作一般的数据结构。c++语言提供了两种字符串的实现:C风格的 字符串,以’/0‘结尾;std::string,即标准模版库中的类。Qt则提供了自己的字符串实现:QString。QString以16位 UNIOde进行编码。我们平常用的ASCII等一些编码集都作为Unicode编码的子集提供。关于编码的问题,我们会到以后的时候再详细说明。

在使用QString的时候,我们不需要担心内存分配以及关于’/0’结尾的这些注意事项。QString会把这些问题解决。通常,你可以把 QString看作是一个QChar的向量。另外,与C风格的字符串不同,QString中间是可以包含’/0’符号的,而length()函数则会返回 整个字符串的长度,而不仅仅是从开始到’/0’的长度。

同Java的String类类似,QString也重载的+和+=运算符。这两个运算符可以把两个字符串连接到一起,正像Java里面的操作一样。QString可以自动的对占用内存空间进行扩充,这种连接操作是恨迅速的。下面是这两个操作符的使用:

QStringstr="User:";
str+=userName+"/n";

QString的append()函数则提供了类似的操作,例如:

str="User:";
str.append(userName);
str.append("/n");

QString转QByteArray方法

//Qt5.3.2
QString str("hello");  
QByteArray bytes = str.toUtf8(); // QString转QByteArray方法1 
QString str("hello");  
QByteArray bytes = str.toLatin1();  // QString转QByteArray方法2

QByteArray转QString方法

//Qt5.3.2
    QByteArray bytes("hello world");
    QString string = bytes;   // QByteArray转QString方法1
    QByteArray bytes("hello world");
    QString string;
    string.prepend(bytes);// QByteArray转QString方法2
    qDebug() << string;

QByteArray类同样不以’\0’为结尾

QByteArray bytes;  
bytes.resize(5);  
bytes[0] = '1';  
bytes[1] = '2';  
bytes[2] = '3';  
bytes[3] = '\0';  
bytes[4] = 'a';  
cout << bytes << endl;  

QByteArray转QString,主要用buf.toHex()即可

    static QString ByteArrayToHexStr(QByteArray buf)
    {
        QString retStr;
        retStr.append(buf.toHex());
        return retStr;
    }

[2] Qt开发串口通讯软件中的数据转换问题

在利用Qt进行串口程序开发过程中,除了与串口通讯的功能实现以外,数据的转换也是比较麻烦的一件事,本篇主要介绍串口通讯中数据转换的问题,关于功能实现大家在网上搜索就能找到相关案例。

在完成串口的初始化等功能之后,实现数据的读取转换。

1.读取串口命令-QByteArray转QString,QString转float

从串口接收到的数据形如:“0010101821…”的16进制数,串口返回QByteArray的数据格式,通过以下方式转换为QString,再通过截取数据中某几位,按照16进制格式转换为10进制使用。

QByteArray转QString

static QString serialBuffer;
QByteArray serialBufferTmp=m_serialPort->readAll();
serialBuffer=serialBuffer.append(serialBufferTmp);

截取第8位后4位的16进制数,并QString转float

QString strValue=serialBuffer.mid(8,4);
float floatValue=strValue.toInt(nullptr,16)

2.向串口写入命令

十进制int转16进制格式string

通常我们从Qt开发的界面中使用QLineEdit输入的是十进制类型的,而为了串口处理需要将其转换为16进制格式,再通过处理成串口可以解析的格式,例如十进制50转换为16进制的“32”,代码如下:

int Num=dec2HexInputEdit->text().toInt();
QString hexString=QString::number(Num,16) 

16进制数加法

此处参考Qt 十六进制的简单应用, 十六进制的加法,它是先将数转换为10进制,相加后再转换为QString

QString hexAri(QString str, int addend)
{
    bool ok;
    int dec = str.toUInt(&ok, 16);
    QString tmp = QString("%1").arg(dec + addend, 5, 16, QLatin1Char('0');
    return tmp;
}

[3] QT QString与QByteArray的相互转换

QByteArray(const char *data, int size = -1) 
//QByteArray Str("1234")  内存中存储可能就是对应的ASSIC:0x31, 0x32, 0x33, 0x34
QByteArray QByteArray::fromHex(const QByteArray &hexEncoded)
//将字符串的“1234”变为0x11 0x34,原本占用4字节内存,现在变为2字节。0x31, 0x32, 0x33, 0x34 ==> 0x12 0x34
QByteArray QByteArray::toHex() const
//将0x12 0x34 变为 “1234”  原本占用2字节内存,现在变为4字节 0x12 0x34 ==> 0x31, 0x32, 0x33, 0x34
int QByteArray::toInt(bool *ok = Q_NULLPTR, int base = 10) const
//Str.toInt(&Ok, 16)将字符串 “1234”变为int型 0x1234,, 转换的前提:Str内就是存的字符串,Str内存的不是“0”--“9” “a”--“f”,不能转换成功
QString(const QByteArray &ba)
//可以将QByteArray转换为字符串,我认为内存占用,以及数据都是一样的,只是类型变了,原来QByteArray表示0x31 0x32 0x33 0x34, 还是同样的数据用QString表示了
QString fromUtf8(const QByteArray &);
//将QByteArray转换为QSting。字符串的编码方式不同,内存占用以及数据就不同,但是都可以看成char[] 数组,在Qt中char 数组就是QByteArray,因此将不同编码方式的字符串转换为QString的函数入参都是QByteArray
QString number( A, B);
//将数字转换为字符串 将A转变为B进制, A=10  B=16  转换为“a” :  10 = 0x0A ; A=10  B=10  转换为“10”
int QString::toInt(bool *ok = Q_NULLPTR, int base = 10) const 
//base = 16,将字符串 “12”变为 0x12
QByteArray QString::toLatinl() const; 
//将QString编码的字符串转换到 其他类型的字符串编码
QByteArray QString::toUtf8() const;
//举例: 字符串“1”,在内存中就是0x31 (ASSIC 0x31表示1),只不过存储方式是QString的编码,假如Utf8与QString的编码一样,转换出来后,还是0x31
QByteArray QString::toLocal8Bit() const; 
//假如 Local8Bit中 “1” 用16进制0x88表示,  那么转换后,内存的数成了0x88,
QByteArray QString;:toUCS4() const;

Latin1:SO-8859-1编码是单字节编码,向下兼容ASCII,其编码范围是0x00-0xFF
utf8字符集以2个或以上的字节表示一个汉字,实际上具体的数值和unicode有很大的相关性
unicode字符集以2个或以上的字节表示一个汉字。
gb18030字符集兼容了gbk字符集,以两个字节表示一个文字。windows系统可能使用的就是这两种的一种。
UCS:通用字符集(Universal Character Set, UCS)是由ISO制定的ISO 10646(或称ISO/IEC 10646)标准所定义的标准字符集。UCS-2用两个字节编码,UCS-4用4个字节编码。

到此这篇关于C语言中QString与QByteArray互相转换的方法的文章就介绍到这了,更多相关C语言 QString与QByteArray 内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C语言中QString与QByteArray互相转换的方法

本文链接: https://www.lsjlt.com/news/214406.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言中QString与QByteArray互相转换的方法
    目录[1] QString与QByteArray互相转换的方法QString转QByteArray方法QByteArray转QString方法QByteArray类同样不以&rsqu...
    99+
    2023-05-20
    C语言 QString与QByteArray QString QByteArray
  • C语言如何解决QString与QByteArray互相转换的问题
    今天小编给大家分享的是C语言如何解决QString与QByteArray互相转换的问题,相信很多人都不太了解,为了让大家更加了解,所以给大家总结了以下内容,一起往下看吧。一定会有所收获的哦。目录[1] QString与QByteArray互...
    99+
    2023-07-06
  • C语言16进制与ASCII字符相互转换
    1、把获取到的16进制数据转换成相同字符的ASCII字符,例:get[2] = {0x11,0x22};  →  put[4]={&...
    99+
    2022-11-13
  • C语言16进制与ASCII字符相互转换的方法是什么
    这篇“C语言16进制与ASCII字符相互转换的方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言16进制与ASC...
    99+
    2023-06-26
  • C语言标准时间与秒单位相互转换
    目录1. 时间转换-秒与标准时间的转换2. 时间转换-标准时间转秒前言: 这篇文章介绍 标准时间与秒单位,秒单位与标准时间的转换方式,这份代码一般用在嵌入式单片机里比较多,比如:设置...
    99+
    2022-11-13
  • go语言中的json与map相互转换实现
    主要是引入 "encoding/json" 包;用到的也就是其中的两个函数json.Marshal和json.Unmarshal。 1、json.Marshal ...
    99+
    2022-11-11
  • go语言map与string的相互转换的实现
    一.map转string import ( "encoding/json" ) func MapToJson(param map[string]interface{}) ...
    99+
    2022-06-07
    map GO string
  • C语言标准时间与秒单位怎么相互转换
    今天小编给大家分享一下C语言标准时间与秒单位怎么相互转换的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1. 时间转换-秒与标...
    99+
    2023-06-30
  • C语言实现十六进制与二进制的相互转换
    目录十六进制->二进制二进制->十六进制本文中的代码可以将文件中的十六进制存储与二进制存储相互转换。 十六进制->二进制 原理是:每两位存储为一个字符(char)保...
    99+
    2022-11-13
    C语言 十六进制转二进制 C语言 二进制转十六进制 C语言 二进制 十六进制
  • R语言中Rcpp与Eigen库之间如何相互转换
    这篇文章将为大家详细讲解有关R语言中Rcpp与Eigen库之间如何相互转换,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。当我们在使用Rcpp时,进行矩阵运算最简单的是使用Eigen库进行相关操作,可以很轻...
    99+
    2023-06-25
  • java中Calendar与Date类型互相转换的方法
    下文笔者讲述使用Java代码将Calendar与Date类型互转的方法分享,如下所示:Calendar与Date类型是我们日常开发中常用的两种数据类型, 它们用于不同的场景,两者具有...
    99+
    2022-11-13
  • R语言技巧Rcpp与Eigen库之间的相互转换
    当我们在使用Rcpp时,进行矩阵运算最简单的是使用Eigen库进行相关操作,可以很轻松地讲R中向量化与矩阵化的思想应用到C++代码上,从而对代码进行加速。可参考前面的博客:利用Rcp...
    99+
    2022-11-12
  • 聊聊PHP中Base64 、Blob与File的相互转换方法
    本篇文章给大家带来了关于php的相关知识,其中主要跟大家聊一聊Base64 、Blob和File之间是怎么相互转换的?感兴趣的朋友下面一起来看一下吧,希望对大家有帮助。前言在获取图片时,遇到需要转换格式的情况,所以记录下来分享。正文一、格式...
    99+
    2023-05-14
    前端
  • JAVA11中图片与BASE64相互转换的实现方法
    这篇文章主要介绍了JAVA11中图片与BASE64相互转换的实现方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。常用的java框架有哪些1.SpringMVC,Spring...
    99+
    2023-06-14
  • PHP中Base64 、Blob与File相互转换的方法是什么
    这篇文章主要介绍“PHP中Base64 、Blob与File相互转换的方法是什么”,在日常操作中,相信很多人在PHP中Base64 、Blob与File相互转换的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对...
    99+
    2023-07-05
  • C#中对象与JSON字符串互相转换的三种方式
    JSON(JavaScriptObject Notation, JS 对象标记) 是一种轻量级的数据交换格式。 关于内存对象和JSON字符串的相互转换,在实际项目中应比较广泛,经过一...
    99+
    2022-11-13
  • ArrayBuffer、Uint8Array、Blob与文本字符相互转换的方法
    本篇内容介绍了“ArrayBuffer、Uint8Array、Blob与文本字符相互转换的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!...
    99+
    2023-07-02
  • Go语言中int、float、string类型之间相互的转换
    目录前言整形转字符串fmt.Sprintf使用方法strconv.Itoa使用方法strconv.FormatInt入参使用方法浮点型转字符串fmt.Sprintf入参使用方法字符串...
    99+
    2022-11-13
  • C语言隐式类型转换与强制类型转换的方法是什么
    本篇内容主要讲解“C语言隐式类型转换与强制类型转换的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言隐式类型转换与强制类型转换的方法是什么”吧!类型转换数据有不同的类型,不同类型数...
    99+
    2023-06-25
  • python中py文件与pyc文件相互转换的方法实例
    目录1、 compileall py文件转换为pyc1.1、compileall命令行模式1.2、compileall源码模式2、uncompyle6 pyc转换为py文件2.1、安...
    99+
    2022-11-10
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作