Я посмотрел на этот ответ и не могу заставить его работать в моей ситуации. Пожалуйста, не отмечайте это как дубликат, так как я не могу получить ни один из этих ответов, чтобы удовлетворить мою ситуацию.
Я 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
, и я не могу заставить его вести себя так, как я хочу. Я использую 64-битный Xcode 3.2.5 с GCC 4.2.1, если это имеет значение.