Я читаю данные из файла и пытаюсь отобразить необработанные данные в виде двухзначных шестнадцатеричных строк.
Я использую структуру 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 в базовые 16 строк без использования QString:: number?
Я хочу, чтобы эта реализация была как можно быстрее, поэтому, если что-то вроде sprintf может работать, сообщите мне, так как я предполагаю, что может быть быстрее, чем QString:: number.