可以按照以下步骤进行操作:
- 将十进制数123456789012转换成十六进制字符串:
QString hexString = QString("%1").arg(123456789012ull, 0, 16);
其中,%1
表示替换第1个参数,0
表示输出的最小位数为0,16
表示输出的进制为16,ull
表示无符号长长整型。
2. 将十六进制字符串转换成ASCII字符:
QByteArray hexBytes = QByteArray::fromHex(hexString.toLatin1());
QString asciiString = QString::fromLatin1(hexBytes);
注意,这里使用了toLatin1()
将QString转换为QByteArray,因为fromHex()
方法只接受QByteArray类型的参数。
- 将每个ASCII字符转换成十六进制字符串发送到串口:
for (int i = 0; i < asciiString.size(); i++)
{
QString hexChar = QString("%1").arg(static_cast<unsigned char>(asciiString.at(i)), 2, 16, QLatin1Char('0')); // send hexChar to serial port
}
使用at()
方法访问每个ASCII字符,使用static_cast<unsigned char>
转换成无符号字符型,再使用arg()
方法将其转换成2位的十六进制字符串。
4. 在接收端使用移位运算符将这12个字节转换成长整型:
char bytes[12];// receive 12 bytes from serial port into bytes array
quint64 number = 0;
for (int i = 0; i < 12; i++) {
number |= static_cast<quint64>(bytes[i]) << (8 * (11 - i));
}
- 使用
|=
运算符将每个字节数据按位或运算积累到number
变量中,最后使用移位运算符将这12个字节拼接成一个长整型数值。注意,由于Qt中长整型的大小为8个字节.