вывод char в hex поток в C ++ с использованием GCC 4.2.1 - PullRequest
1 голос
/ 29 января 2011

Я посмотрел на этот ответ и не могу заставить его работать в моей ситуации. Пожалуйста, не отмечайте это как дубликат, так как я не могу получить ни один из этих ответов, чтобы удовлетворить мою ситуацию.

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

1 Ответ

1 голос
/ 29 января 2011

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

...