[英]Convert (manually) from uint32_t to 4 chars
我有一個帶有特殊typedef的程序,該程序在很多地方用於為軟件中的組件分配唯一的代碼。
typedef uint32_t FourCharCode;
在某種程度上,我有一個使用這種代碼來完成其工作的函數。 我需要在此功能中進行調試
extern "C" ___DllExport void A_function(FourCharCode in_type)
{
FourCharCode x = 'KjfG';
FourCharCode y = 'tdkf';
FourCharCode z = '5vpO';
switch (in_type) {
case x:
// Do something
break;
case y:
// Do something
break;
case z:
// Do something
break;
default: break;
}
return XX::NoError;
}
顯然,當我放置一個斷點以查看in_type
的值是in_type
,我獲得了一個無符號的int('1918980169')。
我的問題:
在MSVC 2013調試器中,有沒有一種方法可以將uint32_t值顯示為可讀的?
要么
我可以手動執行什么操作(使用計算器,python腳本或其他有用的工具)以檢索隱藏在此uint后面的4個字符(我不反對使用紙和筆,但是我不知道該怎么做)計算)?
也許您可以嘗試使用工會。 像那樣 :
struct fourCharCode
{
char fourCode[4];
};
union UFourCode
{
fourCharCode fourChar;
__int32_t myInt32;
};
你用它像
int main()
{
UFourCode u;
u.int32 = 1918980169; //From your question
std::cout << u.fourChar.fourCode;
}
輸出為:
IPar
如果要手動轉換值,則以十六進制顯示值比十進制要容易得多。 '5vpO'
十進制值為896954447,但是如果在“監視”窗口中單擊鼠標右鍵,則可以選擇“十六進制顯示”,並且顯示為0x3576704f。 0x35為'5'
,0x76為'v'
,0x70為'p'
,0x4f為'O'
。 要在每個變量的基礎上顯示為十六進制,請在監視窗口的變量名后附加,h
,如z,h
。
或者,您可以將變量轉換為char*
並將其顯示為長度為4的數組。如果將(char*)&z,4
到"Opv5"
窗口,它將顯示"Opv5"
。 這與x86 PC上聲明的字符串相反,因為它們是低位優先的,但很容易閱讀。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.