parseInt('bcedfg',16)
基于此代码,我在JavaScript中 773855 ,
我浏览转换表,但不确定如何获得此“773855”值
我的问题是parseint是如何产生这个“773855”值的,因为我想将这个微小的代码翻译成ac#代码,并且c#中任何类似的方式都允许我获得这个“773855”值
答案 0 :(得分:10)
bcedfg
被解释为十六进制(基数: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
的低级知识答案 1 :(得分:6)
使用Convert.ToInt32
:
Convert.ToInt32(theString, 16)
它使用了这个重载:
public static int ToInt32(string value, int fromBase)
请注意,由于字符串中的FormatException
,您将获得g
<强>出现FormatException 强>
值包含的字符不是fromBase 指定的基数中的有效数字。异常消息表示如果值中的第一个字符无效,则没有要转换的数字;否则,该消息表明该值包含无效的尾随字符。
你没有在javascript中收到错误,因为js倾向于“原谅”过多的错误,这是其中一个例子。