这段代码看起来有点荒谬,但这是我发现处理问题的唯一方法......
char word[10];
cout << std::hex << static_cast<int>(static_cast<unsigned char>(word[i]));
这是我将char作为十六进制值(包括签名字符)的方法。它似乎工作得很好(据我所知),但我觉得这是一个非常愚蠢的方法。 我应该补充一下,我正在阅读一个文件,这就是为什么我的数据类型最初是char。
答案 0 :(得分:1)
尽管使用int
和unsigned int
一样有效,但您已经采用了正确的方法。如果您要在多个地方执行此操作,您可以创建一个函数或仿函数,例如:
int char_to_int(char ch)
{
return static_cast<unsigned char>(ch);
}
// ...
cout << hex << char_to_int(word[i]);
如评论中所述,另一个选项是word[i] & 0xFF
,没有投射。这实际上是实现定义的,但很可能会给出预期的结果。但是,如果你将在几个地方做这件事,我建议把它包装在一个函数中,以便更明显地发生了什么。