3 回答
TA贡献1895条经验 获得超7个赞
我建议使用以下技术:
struct HexCharStruct
{
unsigned char c;
HexCharStruct(unsigned char _c) : c(_c) { }
};
inline std::ostream& operator<<(std::ostream& o, const HexCharStruct& hs)
{
return (o << std::hex << (int)hs.c);
}
inline HexCharStruct hex(unsigned char _c)
{
return HexCharStruct(_c);
}
int main()
{
char a = 131;
std::cout << hex(a) << std::endl;
}
它写起来很短,与原始解决方案具有相同的效率,它使您可以选择使用“原始”字符输出。而且它是类型安全的(不使用“邪恶的”宏:-)
TA贡献1836条经验 获得超5个赞
使用:
cout << "a is " << hex << (int) a <<"; b is " << hex << (int) b << endl;
如果要用前导零填充,则:
#include <iomanip>
...
cout << "a is " << setw(2) << setfill('0') << hex << (int) a ;
当我们使用C风格的强制转换时,为什么不花大量时间解决C ++终端错误并使用宏呢!
#define HEX( x )
setw(2) << setfill('0') << hex << (int)( x )
然后你可以说
cout << "a is " << HEX( a );
编辑:话虽如此,MartinStettner的解决方案要好得多!
- 3 回答
- 0 关注
- 646 浏览
添加回答
举报