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