parseInt('bcedfg',16)
基于此代码,我在 JavaScript 中得到773855 ,
我浏览了转换表,不知道如何获得这个“773855”值
我的问题是 parseint 是如何得出这个“773855”值的,因为我想把这个小代码翻译成 ac# 代码,并且 c# 中的任何类似方式都允许我得到这个“773855”值
parseInt('bcedfg',16)
基于此代码,我在 JavaScript 中得到773855 ,
我浏览了转换表,不知道如何获得这个“773855”值
我的问题是 parseint 是如何得出这个“773855”值的,因为我想把这个小代码翻译成 ac# 代码,并且 c# 中的任何类似方式都允许我得到这个“773855”值
被bcedfg
解释为 hex(base: 16
)。f
然而,十六进制比例会在 javascript 中翻转,g
然后在转换之前删除它之后的所有内容。话虽如此,转换的工作原理如下:
decValueOfCharPosition = decValueOfChar * base ^ posFromTheRight
所以:
b = 11 * 16^4 = 11 * 65536 = 720896
c = 12 * 16^3 = 12 * 4096 = 49152
d = 13 * 16^2 = 13 * 256 = 3328
e = 14 * 16^1 = 14 * 16 = 224
f = 15 * 16^0 = 15 * 1 = 15
一旦您知道每个字符位置的十进制值,只需将它们加在一起即可获得转换后的十进制值:
b(720896) + c(49152) + d(3328) + e(224) + f(15) = 773855
C 及其后代在输入方面并不那么宽容。C 并没有删除第一个无效字符和后面可能出现的任何字符,而是抛出一个Format Exception
. 要解决此问题以获取 javascript 功能,您必须首先删除无效字符及其以下内容,然后您可以使用:
Convert.ToInt32(input, base)
我没有包括删除无效字符的方法,因为有多种方法可以这样做,而且我对 C 的了解不足
使用Convert.ToInt32
:
Convert.ToInt32(theString, 16)
它使用这个重载:
public static int ToInt32(string value, int fromBase)
请注意,FormatException
由于g
字符串中的 ,您将得到:
FormatException
值包含的字符不是 fromBase 指定的基数中的有效数字。异常消息表明如果 value 中的第一个字符无效,则没有要转换的数字;否则,该消息表明该值包含无效的尾随字符。
您不会在 javascript 中遇到错误,因为 js 倾向于“原谅”太多错误,这就是其中之一。