1

我从 XML 文件中读取 UInt32 值作为字符串。然后我想将其转换为 UInt32。

UInt32 res = Convert.ToUInt32("0x00B73004", 16);

但转换后的结果值为:12005380

为什么会这样?

4

3 回答 3

4

它按预期工作。0xB73004(带有任意数量的前导零)是十进制表示法的 12005380。

>>> hex(12005380)
'0xb73004'
于 2014-10-24T13:37:12.373 回答
3

正如其他答案所暗示的,十六进制数 B73004 等于十进制数 12005380。

您可能会忘记的是 UInt32 不能保存任何格式。UInt32 只是代表一个数字的 32 位的组合;一个值。如何显示该数字完全取决于您。您可以将其显示为十六进制、二进制或十进制数。例子:

Console.WriteLine("{0} = {0:X}", res);

您甚至可以通过右键单击“监视”窗口并选择“十六进制显示”来告诉 Visual Studio 以十六进制格式显示值。

这种行为与浮点数相同:它不包含任何信息,如果它应该用点或逗号格式化。这取决于(当前)文化。也适用于 DateTime:它包含日期和时间,没有任何格式。程序员可以定义日期和时间的显示方式(例如:dd-MM-yyyyyyyy-MM-dd等)

于 2014-10-24T13:45:59.123 回答
1

0x00B73004只是的十六进制表示12005380。前缀"0x"是表示十六进制常量的最常用符号。

既然你问为什么在这里数学方面;

00B73004 16 = 0 * 16 7 + 0 * 16 6 + B * 16 5 + 7 * 16 4 + 3 * 16 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;

没有错。您可以在调试器上看到它的以10 为底的值。

在此处输入图像描述

于 2014-10-24T14:02:14.017 回答