[英]Is there an algorithm to convert massive hex string to bytes stream QUICKLY? asm/C/C++
[英]Quickly convert raw data to hex string in c++
我正在從文件中讀取數據並嘗試將原始數據顯示為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。
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
所以我的主要問題是:
我希望這個實現盡可能快,所以如果像sprintf這樣的東西可以工作,請告訴我,因為我猜想QString :: number可能會更快。
QString
不能用於二進制數據。 你應該使用QByteArray
。 它可以很容易地從char*
buffer創建,並且可以使用toHex
輕松轉換為十六進制字符串。
QByteArray array(memblock, size);
textEdit->setText(QString(array.toHex()));
QString::number
沒有帶char
的重載,所以你的輸入被提升為int
; 因此你看到了符號擴展的影響。 您應該看到任何大於0x7F
輸入0x7F
類似的行為。
在調用函數之前嘗試轉換數據。
s.append(QString::number(static_cast<unsigned char>(memblock[i]), 16).toUpper());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.