我如何比较以下内容:
unsigned char a = 0x00;
char b = '0'; // signed char
如何编写与a和b匹配的比较/转换?
谢谢!
答案 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'。但比较的手段仍然存在。