C++ C+中的字符到十六进制流输出+;使用GCC 4.2.1

C++ C+中的字符到十六进制流输出+;使用GCC 4.2.1,c++,formatting,char,hex,iostream,C++,Formatting,Char,Hex,Iostream,我已经看过了,但无法让它在我的情况下发挥作用。请不要将此标记为重复,因为我无法获得任何这些答案来满足我的情况 我正在mallocing一些内存并将数据复制到该内存中。我希望能够以十六进制格式打印每个字节的值,格式为0xFF,其中一个字节等于255 我已将指向内存的void*指针转换为char*,并正在迭代内存块,但当我尝试打印出值时,我得到的是非常宽的输出,而不是两个数字,我得到的是无符号int的全宽 std::ostream& operator << (std::ostre

我已经看过了,但无法让它在我的情况下发挥作用。请不要将此标记为重复,因为我无法获得任何这些答案来满足我的情况

我正在
malloc
ing一些内存并将数据复制到该内存中。我希望能够以十六进制格式打印每个字节的值,格式为
0xFF
,其中一个字节等于
255

我已将指向内存的
void*
指针转换为
char*
,并正在迭代内存块,但当我尝试打印出值时,我得到的是非常宽的输出,而不是两个数字,我得到的是
无符号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;
}

std::ostream&operator使用
unsigned char*aschar
代替(signed)
char*aschar

使用
unsigned char*aschar
代替(signed)
char*aschar