使用字符,我发现的唯一解决方案是 static_cast 两次。有没有解决的办法?
Working with chars and only solution I've found is to static_cast twice. Is there a way around this?
这段代码看起来有点荒谬,但这是我找到的解决问题的唯一方法...
char word[10];
cout << std::hex << static_cast<int>(static_cast<unsigned char>(word[i]));
这是我将字符计算为十六进制值(包括有符号字符)的方法。它似乎工作得很好(据我所知),但我觉得这是一种非常愚蠢的方法。
我应该补充一点,我正在读取一个文件,这就是为什么我的数据类型最初是 char。
尽管使用 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
没有强制转换。这实际上是实现定义的,但很可能会给出预期的结果。但同样,如果您将在多个地方执行此操作,我建议将其包装在一个函数中,以便更清楚地了解正在发生的事情。
这段代码看起来有点荒谬,但这是我找到的解决问题的唯一方法...
char word[10];
cout << std::hex << static_cast<int>(static_cast<unsigned char>(word[i]));
这是我将字符计算为十六进制值(包括有符号字符)的方法。它似乎工作得很好(据我所知),但我觉得这是一种非常愚蠢的方法。 我应该补充一点,我正在读取一个文件,这就是为什么我的数据类型最初是 char。
尽管使用 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
没有强制转换。这实际上是实现定义的,但很可能会给出预期的结果。但同样,如果您将在多个地方执行此操作,我建议将其包装在一个函数中,以便更清楚地了解正在发生的事情。