如何使用parseInt获取其值

4
parseInt('bcedfg',16)

根据这段代码,我在JavaScript中得到了773855

我查看了转换表,不确定如何获得这个“773855”值。

我的问题是,如何使用parseint获取这个“773855”值,因为我想将这个简短的代码翻译成c#代码,是否有类似的方法可以让我获得这个“773855”值。


问题在于“bcedfg”被解释为十六进制(基数:16)。而十六进制刻度在“f”处翻转。 - SReject
2个回答

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会抛出一个格式异常。为了解决这个问题并实现JavaScript的功能,你必须先移除无效字符及其后面的字符,然后才能使用以下代码:

Convert.ToInt32(input, base)

由于有多种删除无效字符的方法,且我对C语言了解有限,所以我没有包含删除无效字符的方法。


谢谢您的解释,SReject。 - abc cba

6

使用 Convert.ToInt32

Convert.ToInt32(theString, 16)

它使用这个重载:
public static int ToInt32(string value, int fromBase)

请注意,由于字符串中的“g”,您将获得“FormatException”:

FormatException
值包含一个在fromBase指定的基数中无效的数字字符。 如果value中的第一个字符无效,则异常消息表示没有要转换的数字; 否则,消息指示value包含无效的尾随字符。

MSDN

由于JavaScript倾向于“宽容”太多错误,因此您不会在JavaScript中收到错误,这是其中之一的例子。

2
由于 g 字符的存在,这不会触发 FormatException 异常吗? - DCoder
感谢gdoron,因为在JavaScript中它不会返回错误,但在C#中会返回错误,但一旦我删除g,它就会得到与js相同的值..感谢您的答案。 - abc cba

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接