gpt4 book ai didi

c++ - 在 C++ 中快速将原始数据转换为十六进制字符串

转载 作者:IT老高 更新时间:2023-10-28 23:13:11 33 4
gpt4 key购买 nike

我正在从文件中读取数据并尝试将原始数据显示为 2 位十六进制字符串。

我正在使用 Qt 框架,特别是 QTextEdit。

我尝试了很多不同的方法,并且几乎完成了我想要它做的事情,但是它有一些我不知道的意外错误。

目前这是我的实现:

1) 读入数据:

ifstream file (filePath, ios::in|ios::binary|ios::ate);
if (file.is_open())
{
size = file.tellg();
memblock = new char [size+1];
file.seekg(0, ios::beg);
file.read(memblock, size);
file.close();
}

2) 创建一个将被使用的 QString(因为 QTextEdit 需要一个 QString):

QString s;

3) 循环遍历将每个连续字符附加到 QString s 的数组。

int count = 0;
for(i=0;i<size;i++)
{
count++;;
s.append(QString::number(memblock[i], 16).toUpper());
s.append("\t");
if (count == 16)
{
s.append("\n");
count -= 16;
}
}

现在这可以正常工作了,除了当它到达字符 FF 时,它显示为 FFFFFFFFFFFFFFFF

所以我的主要问题是:

  1. 为什么只有“FF”字符显示为“FFFFFFFFFFFFFFFF”?
  2. 有没有办法在不使用 QString::number 的情况下将 char 数据转换为 base 16 字符串?

我希望这个实现尽可能快,所以如果像 sprintf 这样的东西可以工作,请告诉我,因为我猜这可能比 QString::number 更快。

最佳答案

QString 不能用于二进制数据。您应该改用 QByteArray。它可以从 char* 缓冲区轻松创建,并且可以使用 toHex 轻松转换为十六进制字符串。

QByteArray array(memblock, size);
textEdit->setText(QString(array.toHex()));

关于c++ - 在 C++ 中快速将原始数据转换为十六进制字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17219955/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com