4
parseInt('bcedfg',16)

基于此代码,我在 JavaScript 中得到773855 ,

我浏览了转换表,不知道如何获得这个“773855”值

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

4

2 回答 2

10

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 的了解不足

于 2012-10-21T09:55:16.343 回答
6

使用Convert.ToInt32

Convert.ToInt32(theString, 16)

它使用这个重载:

public static int ToInt32(string value, int fromBase)

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

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

MSDN

您不会在 javascript 中遇到错误,因为 js 倾向于“原谅”太多错误,这就是其中之一。

于 2012-10-21T09:49:16.980 回答