私は以下の関数でバイトのシーケンスを印刷しようとしていますが、奇妙な何かが発生しています。文字は例えば0xEDです。 (中に疑問符がついた奇妙な文字で、あたかも印刷できないかのように)。それは私のコード、または私がそれを印刷するコンソールのためですか?バイトのシーケンスを印刷
また、コードは正しいですか、それを改善するために別のやり方をしていますか?
編集:出力例
1F 8B 08 00 00 00 00 00 97 86 22 0D 89 72 EC 04 ........ .."..r�.
おかげ
void printBytes(std::string string) {
QDebug qD = qDebug().nospace();
qD << "Printing string of size " << string.size() << "\n";
char buffer [3];
int j = 0;
std::string printable = "";
for (uint32_t i = 0; i != string.size(); ++i) {
snprintf(buffer, sizeof(buffer), "%02X", (unsigned char) string.at(i));
qD << buffer;
printable += QChar(string.at(i)).isPrint() ? string.at(i) : '.';
printable += j == 7 ? " " : "";
if (j == 15) {
qD << "\t" << printable.c_str() << "\n";
printable = "";
j = 0;
} else {
qD << (j == 7 ? " " : " ");
j++;
}
}
if (j != 0) {
qD << std::string((16-j) * 3, ' ').c_str() << "\t" << printable.c_str();
}
}
文字セットの不一致。文字セットYを使用するディスプレイ環境で文字セットXから文字を印刷しようとしていて、その "y"文字セットにその文字グリフがないか、その文字セットに無効な文字が含まれています。 –
文字の代わりに数値を印字することを検討すべきでしょうか? – nosbor
関連:http://stackoverflow.com/a/217269/12711 –