Я использую Qt, и у меня есть unsigned char *bytePointer
и хотите распечатать числовое значение текущего байта. Ниже приведен мой код, который предназначен для предоставления значения int и шестнадцатеричного значения непрерывных байтов, которые я получаю от компьютера, подключенного к компьютеру:
int byteHex=0;
byteHex = (int)*bytePointer;
qDebug << "\n int: " //this is the main issue here.
<< *bytePointer;
std::cout << " (hex: "<< std::hex
<< byteHex
<< ")\n";
}
Это дает отличные результаты, и я получаю реальные цифры, однако этот код входит в API, и я не хочу использовать функции только для Qt, такие как qDebug. Итак, когда я пытаюсь это:
int byteHex=0;
byteHex = (int)*bytePointer;
std::cout << "\n int: " //I changed qDebug to std::cout
<< *bytePointer;
std::cout << " (hex: "<< std::hex
<< byteHex
<< ")\n";
}
Вывод действительно дает шестнадцатеричные значения отлично, однако int-значения возвращают символы (например, ☺, └, §, чтобы перечислить несколько).
Мой вопрос: как я могу получить std::cout
дать тот же результат, что и qDebug
?
РЕДАКТИРОВАТЬ: по какой-то причине символы появляются только с определенной настройкой Qt. Я понятия не имею, почему это произошло, но это исправлено сейчас.
Как отмечали другие в комментарии, вы меняете вывод на hex, но на самом деле не устанавливаете его здесь:
std::cout << " (hex: "<< std::hex
<< byteHex
<< ")\n";
Вам нужно будет применить это впоследствии:
std::cout << std::dec;
Стандартные выходные потоки будут выводить любой тип символа как символ, а не числовое значение. Чтобы вывести числовое значение, преобразуйте в целочисленный тип без символов:
std::cout << int(*bytePointer);