Я читал много предложений по одной теме и пытался реализовать многие из них, но, похоже, что никто из них не работает в моей среде. Я использую QT 5, но я думаю, что проблема не связана с QT, а с тем, как шестнадцатеричный символ 0x00 интерпретируется языком. Что я должен добиться того, чтобы отобразить поток неподписанные символ в виде шестнадцатеричных значений, например:создать и отобразить шестнадцатеричную строку в C++
Входные байты: 0x00 0x4e 0x01 0x00 0x17 0x00
Показать как: 0х00: 0x4e: 0x01: 0x00: 0x17: 0x00
кажется довольно легко, но все это я получаю пустой строкой ...
функции я писал:
QString getBufferAsHexStr(const unsigned char* buf, int buffsize) {
std::string finalstring("");
char tempbuff[5];
int n=0, index=0;
for (int c = 0; c < buffsize; c++) {
if(c == buffsize-1) {
n=sprintf(tempbuff, "0x%02X", buf[c]);
} else {
n=sprintf(tempbuff, "0x%02X:", buf[c]);
}
finalstring.append(tempbuff, n);
index += n;
}
QString resultStr(finalstring.c_str());
return resultStr;
}
QString getBufferAsHexStr(const unsigned char* buf, int buffsize) {
std::stringstream ss;
for (int c = 0; c < buffsize; c++) {
if(c == buffsize-1) {
ss << std::hex << std::showbase << buf[c];
} else {
ss << std::hex << std::showbase << buf[c] << ":";
}
}
const std::string finalstring = ss.str();
QString resultStr(finalstring.c_str());
return resultStr;
}
FIRST, почему вы делаете 'tempbuff' в вашем первом примере, чтобы размер был равен тому, что вы думаете * он должен быть? Вы идете по канату, сделав этот размер '5'. Почему бы не сделать это 10 и быть в безопасности? На самом деле это переполнение буфера, поскольку вы пытаетесь набить в него 6 символов. – PaulMcKenzie
@drescherjm: Из любопытства, почему QString, а не 'std :: string'? –
Это второй вариант. – drescherjm