有没有办法更改unsigned char
的<{1}}输出格式?
我正在使用Boost.Test 1.37.0来验证unsigned char数组中的值:
BOOST_CHECK_EQUAL_COLLECTIONS
我在不匹配时得到了不可打印的字符:
// result.Message is a fixed-size unsigned char array
// result.Length is the length of the data inside result.Message
const unsigned expected_message[] = { 3, 60, 43, 17 };
BOOST_CHECK_EQUAL_COLLECTIONS(
result.Message,
result.Message + result.Length,
expected_message,
expected_message + sizeof(expected_message) / sizeof(*expected_message) );
我暂时将test_foo.cpp(117): error in "test_bar": check { result.Message, result.Message + result.Length } == { expected_message, expected_message + sizeof(expected_message) / sizeof(*expected_message) } failed.
Mismatch in a position 1: != 60
Mismatch in a position 2: < != 43
Mismatch in a position 3: != 17
更改为expected_message
数组,因此它会打印数字而不是字符 - 同样,我可以将unsigned
复制到新的result.Message
并与之进行比较:
vector<unsigned>
这并不可怕,但如果可能,我宁愿与原版进行比较。
在内部,vector<unsigned> result_message(result.Message, result.Message + result.Length);
正在使用我无法访问的临时BOOST_CHECK_EQUAL_COLLECTIONS
,但它让我想知道stringstream
格式化。
我没有很多处理方面和区域设置的经验,但我想知道我是否可以某种方式使用它们来使单个ostream
的打印成为数字而不是ASCII?
答案 0 :(得分:1)
令我惊讶的是,您可以通过在测试文件中的operator<<
命名空间中为unsigned char
定义std
(在我的情况下为test_foo.cpp
)来实现此目的:< / p>
namespace std {
ostream &operator<<( ostream &os, const unsigned char &uc ) {
return os << static_cast<unsigned>(uc);
}
}
这给出了:
Mismatch in a position 0: 4 != 60
Mismatch in a position 1: 60 != 43
Mismatch in a position 2: 9 != 17