我将UInt32值作为XML文件中的字符串读取。然后我想将其转换为UInt32。
UInt32 res = Convert.ToUInt32("0x00B73004", 16);
但转换后的结果值为:12005380
为什么会这样?
答案 0 :(得分:4)
它正如预期的那样工作。 0xB73004
(带有任意数量的前导零)是十进制表示法的12005380。
>>> hex(12005380)
'0xb73004'
答案 1 :(得分:3)
正如其他答案所示,十六进制数B73004等于十进制数12005380.
您可能忘记的是UInt32无法保留任何格式。 UInt32只是32位的组合,代表一个数字;一个值。这个数字的显示方式完全取决于您。您可以将其显示为十六进制,binairy或十进制数。例如:
Console.WriteLine("{0} = {0:X}", res);
您甚至可以告诉Visual Studio以十六进制格式显示值,右键单击Watch窗口并选择'十六进制显示'。
此行为与浮点数相同:如果应使用点或逗号格式化,则不包含任何信息。这取决于(当前)文化。
同样适用于DateTime:它包含日期和时间,没有任何格式。程序员可以定义应该如何显示日期和时间(例如:dd-MM-yyyy
或yyyy-MM-dd
等)。
答案 2 :(得分:1)
0x00B73004
只是12005380
的{{3}}。前缀"0x"
是表示十六进制常量的最常用符号。
因为你在这里问为什么是数学方面的;
00B73004 16 = 0 * 16 7 + 0 * 16 6 + B * 16 5 + 7 * 16 4 + 3 * 16 < sup> 3 + 0 * 16 2 + 0 * 16 1 + 4 * 16 0
= 0 + 0 + 11 * 16 5 + 7 * 16 4 + 3 * 16 3 + 0 * 16 2 + 0 * 16 1 + 4 * 16 0
= 0 + 0 + 11534336 + 458752 + 12288 + 0 + 0 + 4
= 12005380
顺便说一下B hex = 11 dec
您可以将此十六进制表示法保存为数字值,如;
uint i = 0x00B73004;
没错。您可以在调试器上看到它的hexadecimal notation值。