2010-07-09 187 views
1

怎样比较如下:比较无符号字符= 0×00和符号字符= '00'

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

我怎样写的比较/转换匹配a和b?

谢谢!

+3

注意'“0''是不一样的'” \ 0'' - 首先是ASCII字符'0 ',它的十六进制值是0x30,而不是0x00。 – 2010-07-09 13:36:15

回答

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'; 
} 
6

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

0

您是否使用C++进行编程,如您的标记所示?在这种情况下,您可能更愿意:

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

当然,您知道从无符号到有符号转换中可能会丢失信息。

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