How do I convert a string version of a number in an arbitrary base to an integer?

佐手、 提交于 2019-12-14 03:32:17

问题


how to convert string to integer??

for ex:

  • "5328764",to int base 10
  • "AB3F3A", to int base 16

any code will be helpfull


回答1:


Assuming arbitrary base (not 16, 10, 8, 2):

In C (C++), use strtol

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

In Javascript, use parseInt.

return parseInt("AB3F3A", 16);

In Python, use int(string, base).

return int("AB3F3A", 16)

In Java, use Integer.parseInt (thanks Michael.)

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

In PHP, use base_convert.

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

In Ruby, use to_i

"AB3F3A".to_i(16)

In C#, write one yourself.




回答2:


in C#, i think it is: Convert.ToInt64(value, base) and the base must be 2, 8, 10, or 16




回答3:


9999 is really 9000 + 900 + 90 + 9 So, start at the right hand side of the string, and pick off the numbers one at a time. Each character number has an ASCII code, which can be translated to the number, and multiplied by the appropriate amount.




回答4:


Two functions in java, in both directions: "code" parameter represent the numerical system: "01" for base 2, "0123456789" for base 10, "0123456789abcdef" for hexdecimal and so on...

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@=-+*/^%$#&()!?.,:;[]"));```

in your example:

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


来源:https://stackoverflow.com/questions/2633495/how-do-i-convert-a-string-version-of-a-number-in-an-arbitrary-base-to-an-integer

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!