2010-07-09 172 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'。但是比較手段仍然存在。