我使用 CPPUNIT_ASSERT_EQUAL(a, b) 来检查值 a 和 b。a 和 b 是无符号字符类型。因此,当此断言失败时,它将显示预期值和实际值。因为类型是无符号字符,所以预期值和实际值将显示为字符。例如,35 将显示为#。但这不是我想要的。当然, CPPUNIT_ASSERT_EQUAL((int)a, (int)b) 可能是一个解决方案,但看起来很奇怪。此外,最好将值显示为十六进制格式。但我不知道如何达到这一点。如果有人给出答案,将不胜感激。
问问题
473 次
2 回答
1
我认为实现这种效果的唯一方法是适应a
和/或b
使用合适的类型来进行所需的比较,但格式不同于unsigned char
. 这可能看起来像这样:
template <typename T>
struct as_hex_t
{
as_hex_t(T const& value): d_value(value) {}
T const& d_value;
};
bool operator== (as_hex_t<T> const& v0, as_hex_t<T> const& v1) {
return v0.d_value == v1.d_value;
}
std::ostream& operator<< (std::ostream& out, as_hex_t const& value) {
return out << std::hex << unsigned(value.d_value) << std::dec;
}
template <typenane T>
as_hex_t<T> as_hex(T const& val) { return as_hex_t<T>(val); }
CPPUNIT_ASSERT_EQUAL(as_hex(a), as_hex(b));
显然,适应值的类型只需要在合适的地方定义一次,就可以进入合适的宏。我不知道 CPPUNIT 但我可以想象这样的东西存在于某处。
于 2012-10-19T05:51:18.117 回答
0
添加#include <cstdio>
和使用printf
功能。(printf 参考)。
使用%x
或%X
将数字显示为十六进制。上面链接中的示例向您展示了,
printf ("Some different radixes: %d %x %o %#x %#o \n", 100, 100, 100, 100, 100);
给出输出,
Some different radixes: 100 64 144 0x64 0144
于 2012-10-19T05:40:59.193 回答