我使用CPPUNIT_ASSERT_EQUAL(a,b)来检查值a和b。 a和b是unsigned char类型。因此,当此断言失败时,它将显示预期值和实际值。因为类型是unsigned char,所以预期值和实际值将显示为字符。例如,35将显示为#。但这不是我想要的。当然,CPPUNIT_ASSERT_EQUAL((int)a,(int)b)可能是一个解决方案,但它看起来很奇怪。此外,如果值显示为十六进制格式会更好。但我不知道如何达到这个目的。如果有人给出答案,我们将非常感激。
答案 0 :(得分: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,但我可以想象这样的东西存在于某个地方。
答案 1 :(得分:0)
添加#include <cstdio>
并使用printf
功能。 (printf reference)。
使用%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