아래의 함수를 사용하여 일련의 바이트를 인쇄하려고합니다. 예를 들어 문자 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();
}
}
문자 집합이 맞지 않습니다. charset Y를 사용하는 디스플레이 환경에서 charset X의 문자를 인쇄하려하고 "y"charset에 해당 문자 글리프가 없거나 해당 문자 세트에 대해 잘못된 문자가있는 것입니다. –
문자 대신 숫자 값을 인쇄하는 것이 좋습니다. – nosbor
관련 : http://stackoverflow.com/a/217269/12711 –