![](/img/trans.png)
[英]How to use cppunit assert macros to check against preprocessor value which returns data type?
[英]How to display hex value when cppunit assert failed
我使用CPPUNIT_ASSERT_EQUAL(a,b)檢查值a和b。 a和b是無符號的char類型。 因此,當該斷言失敗時,它將顯示期望值和實際值。 因為類型是unsigned char,所以期望值和實際值將顯示為字符。 例如,35將顯示為#。 但這不是我想要的。 當然,CPPUNIT_ASSERT_EQUAL((int)a,(int)b)可能是一個解決方案,但看起來很奇怪。 另外,最好將這些值顯示為十六進制格式。 但是我不知道該如何實現。 如果有人給出答案,將不勝感激。
我認為達到這種效果的唯一方法是將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,但我可以想象到類似的東西存在於某處。
添加#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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.