2011-01-29 2 views
1

Я посмотрел на это 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, если это имеет значение.

ответ

1

Использовать unsigned char *aschar вместо (подписано) char *aschar.