我正在从文件中读取数据,并尝试将原始数据显示为两位十六进制字符串。
我使用的是Qt框架,特别是QTextEdit。
我尝试了许多不同的方法,并且几乎实现了我想要的功能,但是它有一些意外的错误,我对此一无所知。
目前这是我的实现:
1)读取数据:
我使用的是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
所以我的主要问题是:
- 为什么只有'FF'字符会显示为'FFFFFFFFFFFFFFFF'?
- 有没有一种方法可以将char数据转换为十六进制字符串而不使用QString::number?
我希望这个实现尽可能快,所以如果类似sprintf的东西能够工作,请告诉我,因为我猜想那可能比QString::number更快。