我使用CPPUNIT_ASSERT_EQUAL(a,b)檢查值a和b。 a和b是無符號的字符類型。所以,當這個斷言失敗時,它會顯示預期值和實際值。由於類型是無符號字符,預期值和實際值將顯示爲字符。例如,35將顯示爲#。但這不是我想要的。當然,CPPUNIT_ASSERT_EQUAL((int)a,(int)b)可能是一個解決方案,但看起來很奇怪。此外,如果值以十六進制格式顯示,則會更好。但我不知道如何達到這一點。如果有人給出答案,將不勝感激。如何在cppunit斷言失敗時顯示十六進制值
2
A
回答
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,但我可以想象這樣的事情存在於某個地方。
0
添加#include <cstdio>
並使用printf
函數。 (printf reference)。
使用%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
+0
是的,我知道printf的指定字符。但輸出是由CPPUNIT框架打印的。我不知道如何使用printf函數來控制格式。我認爲必須有一些方法來實現這一點。無論如何,謝謝你的回答。 – Kery
相關問題
- 1. 顯示十六進制數
- 2. 值顯示爲十六進制
- 3. phpMyAdmin的顯示allthough「顯示十六進制」十六進制varbinary列是選中
- 4. 如何在x/y軸上顯示十六進制值?
- 5. 如何在vscode中顯示十六進制值?
- 6. 十六進制字符串的Delphi StrToInt WORD,UShort,16位十六進制失敗
- 7. 十六進制值
- 8. 無法顯示在十六進制
- 9. long.TryParse在傳遞十六進制字符串時失敗
- 10. 十六進制值在Android
- 11. 如何讓瀏覽器顯示這個十六進制值(GBK)?
- 12. 如何顯示字節數組的十六進制值?
- 13. 任何方式來顯示在Xcode十六進制plist數值?
- 14. 如何在十六進制字符數組中插入十六進制值
- 15. 十六進制串&十六進制
- 16. long.TryParse失敗的十六進制值,最高最低限度內
- 17. Python的十六進制二進制失敗
- 18. 循環顯示十六進制
- 19. C - 顯示字符爲十六進制
- 20. 顯示十六進制顏色由SASS
- 21. 僅顯示十六進制字符串
- 22. 十六進制表示爲char十六進制的文本
- 23. 如何十六進制轉換爲十六進制
- 24. 如何加入的十六進制值
- 25. 如何以十六進制打印值
- 26. 轉換十六進制字符串十六進制值
- 27. 添加十六進制值以得到十六進制結果
- 28. python字符串與十六進制轉義十六進制值
- 29. 將十六進制拆分爲2個十六進制值
- 30. 如何讓C-x C-e只顯示十進制和十六進制?
非常感謝!^^ – Kery