Я посмотрел на это answer и не могу заставить его работать для моей ситуации. Пожалуйста, не отмечайте это как дубликат, поскольку я не могу получить ни один из этих ответов, чтобы удовлетворить мою ситуацию.char to hex stream output в C++ с использованием GCC 4.2.1
I am malloc
Некоторая память и копирование данных в эту память. Я хочу иметь возможность распечатывать значения каждого из байтов в шестнадцатеричном формате 0xFF
, где байт равен 255
.
Я бросил мой void*
указатель на память, как char*
и я итерация блока памяти, но когда я пытаюсь напечатать значения я получаю очень широкий выход вместо двух цифр я получаю всю ширину unsigned int
.
std::ostream& operator << (std::ostream &os, const Binary &obj)
{
char* aschar = (char*) obj.buffer;
for (long i = 0; i < obj.size; i++)
{
if (isprint(aschar[i]))
{
os << aschar[i];
}
else
{
os << std::hex << std::setw(2) << std::setfill('0') << static_cast<unsigned int> (aschar[i]);
}
}
return os;
}
Я memset
ИНГ все байты 128
в моем тесте. И все, что я получаю, это ffffff80
, когда я ожидаю 80
. Я уверен, что это имеет какое-то отношение к кастингу, а что нет, но я не могу понять, как выразить это так, как я этого хочу.
Я также пытался использовать sprintf
, и я не могу заставить его вести себя так, как я хочу. Я использую Xcode 3.2.5 64 бит с GCC 4.2.1, если это имеет значение.