2

我使用 CPPUNIT_ASSERT_EQUAL(a, b) 来检查值 a 和 b。a 和 b 是无符号字符类型。因此,当此断言失败时,它将显示预期值和实际值。因为类型是无符号字符,所以预期值和实际值将显示为字符。例如,35 将显示为#。但这不是我想要的。当然, CPPUNIT_ASSERT_EQUAL((int)a, (int)b) 可能是一个解决方案,但看起来很奇怪。此外,最好将值显示为十六进制格式。但我不知道如何达到这一点。如果有人给出答案,将不胜感激。

4

2 回答 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 回答