我有一个包含下一个值的字符串:0x6007.(stringToShort)
我想将此字符串转换为short var,但是,当我尝试以下一种方式转换它时:
short s = ((short)Convert.ToUInt16(stringToShort, 16));
然后s等于24583
而不是0x6007
,因为我需要。
有人可以帮忙吗?
答案 0 :(得分:0)
" 0x6007"等值和" 24583"用于人类消费。它们是数字的文本表示,仅对人类有意义。
就计算机而言,在处理实际数字时,它只能理解二进制(甚至在那里,只是在抽象意义上......它不会真正存储二进制数字0和1)。
任何时候你问电脑它想到的是什么号码,它都会从基于二进制的表示转换为人类可读的表示(即使是二进制...我们也会感到害羞的人可以' 请参阅计算机中位的状态,并要求计算机将它们转换为可视化表示。)
将值0x6007
存储在(例如)short
变量中时,该变量包含值0x6007
。它还包含值24583
。哦,它还包含值110000000000111
(二进制)和值60007
(八进制),甚至包含值12287
(基数十二)。因为计算机存储的不是数字的任何特定表示,而是它自己内部表示的任何人类可读数字所代表的数量。
但他们都是一样的。当您解析像#34; 0x6007"这样的人类可读字符串时,您做会在您存储结果的变量中获得该值,即计算机的内部表示具有相同幅度的数字。
默认情况下,如果您要求计算机告诉您该值是什么,它将为您提供" 24583"的十进制表示。但是如果你想要十六进制表示,你只需要很好地问一下,计算机会给你这样的(例如在你的调试器中切换数字显示格式,或者在{{中使用" X"数字格式说明符) 1}},string.Format()
等。)