比较unsigned char = 0x00和signed char = '00'

时间:2010-07-09 13:32:46

标签: c++

我如何比较以下内容:

unsigned char a = 0x00;
char b = '0'; // signed char

如何编写与a和b匹配的比较/转换?

谢谢!

3 个答案:

答案 0 :(得分:6)

'0'0x00不是一回事。 '0'==0x30'\0'==0x00

答案 1 :(得分:2)

像所有人说的那样,他们不是一回事。但是如果你必须将它们相等,你可以用词汇演员来做到这一点:

#include <iostream>
#include <boost/lexical_cast.hpp>
bool compare(unsigned char val, char c) // throws if c is not a digit!
{
        return val == boost::lexical_cast<int>(c);
}

int main() {
        unsigned char a = 0x00;
        char b = '0';
        std::cout << std::boolalpha << compare(a, b) << '\n';
}

答案 2 :(得分:0)

您是否使用C ++进行编程,正如您的标记所暗示的那样?在这种情况下,您可能更喜欢:

static_cast<char>(a) == b
a == static_cast<unsigned char>(b)

当然,要注意从无符号到已签名的转换中可能丢失的信息。

编辑:忽视了其他人的建议。是的,0x00 =='\ 0'和0x30 =='0'。但比较的手段仍然存在。