如何在Java中将大字符串转换为整数?

4
给定以下字符串:
3132333435363738396162636465666768696a6b6c6d6e6f70

我将字符串转换为十六进制,现在我想将其以十六进制而不是字符串形式写入文件。我尝试将其转换为整数,但 Integer.parseInt 只能转换最多4位,如果超出这个值将会出错。


7
这与摇摆有什么关系? - Jon Skeet
3个回答

8

您尝试过使用带有字符串和基数的BigInteger构造函数吗?

BigInteger value = new BigInteger(hex, 16);

示例代码:

import java.math.BigInteger;

public class Test {

    public static void main(String[] args) {
        String hex = "3132333435363738396162636465666768696a6b6c6d6e6f70";
        BigInteger number = new BigInteger(hex , 16);
        System.out.println(number); // As decimal...
    }
}

输出:

308808885829455478403317837970537433512288994552567292653424

我需要按原样写入文件。 - user2090151
@user2090151:我不知道你的意思是什么。这是一个数字 - 没有所谓的“as is”。你需要以某种方式表示它 - 例如十进制数或其他方式。你问如何将其解析为数字 - 我已经向你展示了如何做到这一点。如果你只想将十六进制字符串解析成字节数组,那就完全不同了,你应该从一开始就问这个问题。(不要问一个新问题 - 在Stack Overflow上有很多关于十六进制解析的问题。) - Jon Skeet
转换后,它的值发生了变化,如何获取相同的值? - Amit Sharma
@AmitSharma:恐怕我不明白你在问什么。建议你提出一个新问题,包括完整的示例,包括你期望看到的内容和实际看到的内容。 - Jon Skeet
我将这个值“104917385788526078598”进行转换,转换后得到的值是“1230498387628795168785816”。 - Amit Sharma
@AmitSharma:再次强调:“我建议您提出一个新问题,包括完整的示例,包括您期望看到的内容和实际看到的内容。”(还要解释该值表示什么...它实际上是一个十六进制数吗?您以后还想将其作为十六进制数返回吗?不要在此评论中回答这些问题-请在您的新问题中包含详细信息。) - Jon Skeet

1

尝试:

new BigInteger("3132333435363738396162636465666768696a6b6c6d6e6f70", 16)

1
使用BigInteger,其中一个构造函数需要传入基数参数。
BigInteger value = new BigInteger(hexString, 16);

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