2

CPPUNIT_ASSERT_EQUAL(a, b) を使用して、値 a と b を確認します。a と b は unsigned char 型です。したがって、このアサーションが失敗すると、期待値と実際の値が表示されます。型が unsigned char であるため、期待値と実際の値は文字として表示されます。たとえば、35 は # として表示されます。しかし、これは私が望むものではありません。もちろん、 CPPUNIT_ASSERT_EQUAL((int)a, (int)b) は解決策かもしれませんが、奇妙に見えます。また、値が 16 進形式で表示されるとよいでしょう。しかし、私はこれに到達する方法がわかりません。誰かが答えてくれれば幸いです。

4

2 に答える 2

1

この効果を達成する唯一の方法は、必要な比較を行いますが、とは異なる形式の適切なタイプを適応aさせることです。これは次のようになります。bunsigned 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

Add #include <cstdio> and use printf function. (printf reference).

Use the %x or %X to display the number as a hexadecimal. the example from the link above shows you, that printf ("Some different radixes: %d %x %o %#x %#o \n", 100, 100, 100, 100, 100);

Gives the output,

Some different radixes: 100 64 144 0x64 0144

于 2012-10-19T05:40:59.193 に答える