簡體   English   中英

cppunit斷言失敗時如何顯示十六進制值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM