我看过这个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;
}
在我的测试用例中,我memset
将128
所有字节都添加到ffffff80
。当我期待80
时,我得到的所有内容都是sprintf
。我确信这与演员有什么关系,但是我不知道如何以我想要的方式表达这一点。
我也尝试过使用{{1}}而我无法让它按照我想要的方式行事。如果重要的话,我正在使用Xcode 3.2.5 64位和GCC 4.2.1。
答案 0 :(得分:1)
使用unsigned char *aschar
代替(已签名)char *aschar
。