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