如何将任意基数中的数字的字符串版本转换为整数?

时间:2010-04-13 21:56:51

标签: string

如何将字符串转换为整数??

代表:

  • “5328764”,以int base 10
  • “AB3F3A”,以int base 16

任何代码都会有帮助

4 个答案:

答案 0 :(得分:13)

假设任意基数(不是16,10,8,2):

在C(C ++)中,使用strtol

return strtol("AB3F3A", NULL, 16);

在Javascript中,使用parseInt

return parseInt("AB3F3A", 16);

在Python中,使用int(string, base)

return int("AB3F3A", 16)

在Java中,使用Integer.parseInt(感谢Michael。)

return Integer.parseInt("AB3F3A", 16);

在PHP中,使用base_convert

return intval(base_convert('AB3F3A', 16, 10));

在Ruby中,使用to_i

"AB3F3A".to_i(16)

在C#中,自己写一个。

答案 1 :(得分:0)

<9> 9999真的是9000 + 900 + 90 + 9 所以,从字符串的右侧开始,一次挑选一个数字。 每个字符编号都有一个ASCII码,可以转换为数字,并乘以适当的数量。

答案 2 :(得分:0)

在C#中,我认为它是:Convert.ToInt64(value,base) 基数必须是2,8,10或16

答案 3 :(得分:0)

java中的两个函数,双向都有:“ code”参数代表数字系统:“ 01”代表基数2,“ 0123456789”代表基数10,“ 0123456789abcdef”代表十六进制,依此类推...

public String convert(long num, String code) {
    final int base = code.length();
    String text = "";
    while (num > 0) {
        text = code.charAt((int) (num%base)) + text;
        num /= base;
    }
    return text;
}

public long toLong(String text, String code) {
    final long base = code.length();
    long num = 0;
    long pow = 1;
    int len = text.length();
    for(int i = 0; i < len; i++) {
        num += code.indexOf(text.charAt(len - i - 1)) * pow;
        pow *= base;
    }
    return num;
}

println(convert(9223372036854775807L,"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"));
println(convert(9223372036854775807L,"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ@=-+*/^%$#&()!?.,:;[]"));
println(toLong("Ns8T$87=uh","0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ@=-+*/^%$#&()!?.,:;[]"));```

在您的示例中:

toLong("5328764", "0123456789") = 5328764
toLong("AB3F3A", "0123456789ABCDEF") = 11222842