parseInt如何获得它的价值

时间:2012-10-21 09:47:34

标签: c# javascript

parseInt('bcedfg',16)

基于此代码,我在JavaScript中 773855

我浏览转换表,但不确定如何获得此“773855”值

我的问题是parseint是如何产生这个“773855”值的,因为我想将这个微小的代码翻译成ac#代码,并且c#中任何类似的方式都允许我获得这个“773855”值

2 个答案:

答案 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 指定的基数中的有效数字。异常消息表示如果值中的第一个字符无效,则没有要转换的数字;否则,该消息表明该值包含无效的尾随字符。

MSDN

你没有在javascript中收到错误,因为js倾向于“原谅”过多的错误,这是其中一个例子。