Qt笔记(十二)之十进制 二进制 十六进制转换

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt笔记(十二)之十进制 二进制 十六进制转换相关的知识,希望对你有一定的参考价值。

参考技术A 一.16进制字符串转10进制
QString str ="FF";
bool k;
int dec = str.toInt(&k,16);
if(k)

qDebug()<<"转换成功:"<<dec; // 255

else

qDebug()<<"转换失败";


二.10进制转16进制字符串
int oDec=125;
QString hex1=QString::number(oDec,16);
qDebug()<<hex1; // 7d

三.10进制转二进制
int dec1=15;
qDebug()<<QString::number(dec1,2); // 1111

四.备注:
其他进制的转换,可以先转为10进制,以10进制数为媒介进行转换

Qt 学习笔记 4. QByteArray

1. hex 概念

Qt 中,hex是指 十六进制数 的表示形式。

可以使用 QString 对象的 toLocal8Bit() 方法将 hex 字符串 转换为 QByteArray 类型的 二进制数据
并可以使用 QByteArray 对象的 toHex() 方法将 二进制数据 转换回 hex 字符串
这些方法通常用于处理 图像音频 文件,以及进行 数字签名 等操作。

以下是一个简单的示例代码:

QByteArray byte_array = 0x12, 0x34, 0x56, 0x78;
QString hex_data = byte_array.toHex();  // 将二进制数据转换为hex字符串
QByteArray decoded_data = QByteArray::fromHex(hex_data.toLocal8Bit());  // 将hex字符串转换为二进制数据

qDebug() << hex_data;  // 输出:12345678
qDebug() << decoded_data; // 输出:"\\x12\\x34\\x56\\x78"

在以上实例中,首先创建了一个 QByteArray 对象,其中保存了四个字节的二进制数据。
然后,使用QByteArray 对象的 toHex() 方法将其转换为 hex 字符串,并设置其为 QString 对象。
接着,使用 QString 对象的 toLocal8Bit() 方法将 hex 字符串转换为 QByteArray 类型的二进制数据,并使用 fromHex() 方法将其还原为原始的二进制数据。
最终,使用 qDebug() 函数分别输出了二进制数据 转换后hex 字符串和 还原后 的二进制数据。

需要注意的是,虽然 hex 字符串使用十六进制数字来表示数据,但是它们的实际大小和原始的二进制数据大小是不同的。
在将 hex 字符串转换回原始的二进制数据时,需要确保使用正确的 编码格式,否则可能会导致解码出错。

2.一些常用于处理 hex 数据的函数

Qt 中,可以使用 hex 字符串来表示 二进制数据hex 字符串 可以通过 QByteArray 对象的 toHex() 方法生成,也可以通过 QByteArray 对象的 fromHex() 方法将 hex 字符串 转换为 二进制数据

以下是一些常用于处理 hex 数据的函数:

  1. QByteArray QByteArray::toHex() const

该函数将当前 QByteArray 对象中的 二进制数据 转换为 hex 字符串,并返回该字符串。
默认情况下,各个字节之间不会添加分隔符,例如"0123456789ABCDEF"。

  1. QByteArray QByteArray::fromHex(const QByteArray &hexEncoded)

该函数将给定的 hex 字符串 转换为 二进制数据,并返回一个新的 QByteArray 对象。
hexEncoded参数指定要转换的 hex 字符串。

  1. bool QByteArray::fromHex(const char *hexEncoded, int len)

该函数将给定长度的 hex 字符串 转换为 二进制数据,并直接写入当前 QByteArray 对象的数据中。
hexEncoded 参数指定要转换的 hex 字符串,len 指定 hex 字符串的长度。
如果转换成功,函数返回 true,否则返回 false

  1. QByteArray QByteArray::fromHex(const QString &hexEncoded)

该函数类似于 QByteArray::fromHex(const QByteArray& hexEncoded),但是可以直接使用 QString 类型的 hex 字符串作为输入。

在使用 hex 字符串 表示 二进制数据 时,通常需要注意以下几点:

  1. 各个字节之间的分隔符QByteArray::toHex() 方法生成的 hex 字符串通常 没有 分隔符,使用时需要根据需要手动添加。

例如,可以使用 QString::split() 方法将 hex 字符串分为每两个字符一组,并使用 QString::join() 方法在每组之间添加空格或其他字符。

  1. 字节顺序:在网络传输和存储过程中,字节顺序可能会被改变。

Qt 提供了一些函数来处理 字节序转换,例如 qFromLittleEndian()qFromBigEndian()qToLittleEndian()qToBigEndian() 等。

  1. 编码格式QByteArray::fromHex() 方法可以 解析 多种编码格式的 hex 字符串,例如 UTF-8Latin-1 等。

在使用该函数时,需要确保使用正确的编码格式。

总之,在使用 hex 字符串表示二进制数据时,需要小心处理各种细节问题,以免出现错误。

以上是关于Qt笔记(十二)之十进制 二进制 十六进制转换的主要内容,如果未能解决你的问题,请参考以下文章

Qt 学习笔记 4. QByteArray

C 语言学习笔记:编程基础

C 语言学习笔记:编程基础

Qt如何将串口接收到十六进制转换为十进制,用这个函数不行int hex = str.toInt(&ok, 16);

QT串口通信怎么发送十六进制字符串?

请教QT中怎么实现10进制数转换为16进制数 最好有代码