使用GCC 4.2.1在C ++中使用char转换为十六进制流

时间:2011-01-29 06:26:22

标签: c++ formatting char hex iostream

我看过这个answer并且无法让它适用于我的情况。请不要将其标记为副本,因为我无法获得任何满足我情况的答案。

我是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;
}

在我的测试用例中,我memset128所有字节都添加到ffffff80。当我期待80时,我得到的所有内容都是sprintf。我确信这与演员有什么关系,但是我不知道如何以我想要的方式表达这一点。

我也尝试过使用{{1}}而我无法让它按照我想要的方式行事。如果重要的话,我正在使用Xcode 3.2.5 64位和GCC 4.2.1。

1 个答案:

答案 0 :(得分:1)

使用unsigned char *aschar代替(已签名)char *aschar