簡體   English   中英

將uint32_t(手動)轉換為4個字符

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

您可以創建一個.natvis文件,該文件指定VS調試器中本機C / C ++類型的顯示格式(例如,監視窗口),如果您希望將其顯示為默認查看器以外的其他格式。 natvis放置在%USERPROFILE%\\Documents\\Visual Studio 2013\\Visualizers目錄中,並且在下次調用調試器時會自動加載(無需重新啟動VS)。

您可以詳細介紹natvis文件,包括使用安裝程序(也稱為VSIX )將它們轉換為完整的插件,但是,如果您不打算進行廣泛分發,則手動將其放在該目錄中是最容易的。

如果要手動轉換值,則以十六進制顯示值比十進制要容易得多。 '5vpO'十進制值為896954447,但是如果在“監視”窗口中單擊鼠標右鍵,則可以選擇“十六進制顯示”,並且顯示為0x3576704f。 0x35為'5' ,0x76為'v' ,0x70為'p' ,0x4f為'O' 要在每個變量的基礎上顯示為十六進制,請在監視窗口的變量名后附加,h ,如z,h

或者,您可以將變量轉換為char*並將其顯示為長度為4的數組。如果將(char*)&z,4"Opv5"窗口,它將顯示"Opv5" 這與x86 PC上聲明的字符串相反,因為它們是低位優先的,但很容易閱讀。

正如MuertoExcobito 所述 ,您可以通過Natvis創建任何類型的自定義視圖。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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