【问题标题】:How to convert String to BigInteger representation and back in Java?如何将 String 转换为 BigInteger 表示并返回 Java?
【发布时间】:2013-07-01 15:19:57
【问题描述】:

假设我有一个String,我们称之为foo。这个String可以包含任何值,如字母、数字、特殊字符、UTF-8特殊字符,如á等。例如,这可能是一个真实的值:

"Érdekes szöveget írtam a tegnap, 84 ember olvasta."

我想有以下两种方法:

public BigInteger toBigInteger(String foo)
{
    //Returns a BigInteger value that can be associated with foo
}

public String fromBigInteger(BigInteger bar)
{
    //Returns a String value that can be associated with bar
}

然后:

String foo = "Érdekes szöveget írtam a tegnap, 84 ember olvasta.";
System.out.println(fromBigInteger(toBigInteger(foo)));
//Output should be: "Érdekes szöveget írtam a tegnap, 84 ember olvasta."

我怎样才能做到这一点? 谢谢

【问题讨论】:

  • 您为什么要为此使用BigInteger?这似乎是一种非常不自然的目标数据类型。
  • 我有一个加密和解密一个大数字的算法,表示为一个 BigInteger。事实上,要加密或解密的数字实际上是一个文本消息。因此,在高层次上,我打算使用字符串作为输入并获取该字符串的加密版本。之后,在解密时,我打算使用加密的消息并将其解密为另一个字符串。在低级别我使用数字,在高级我使用字符串
  • 最好让你的加密代码与byte[]一起工作,这是正常的方法。将各种数据类型转换为任意二进制数据是一种常见操作 - 将它们转换为 BigInteger 肯定不是。
  • 我正在对这些数字进行操作,所以我应该实现字节数组之间的操作,例如它们的乘积、总和等。这将涉及很多方法的实现。我使用 BigInteger 是因为所有这些操作都已实现。
  • 投反对票的人,你能告诉我为什么你认为我的问题没有帮助吗?您认为我的方法有什么问题?我应该怎么做而不是我目前的想法?

标签: java string biginteger type-conversion


【解决方案1】:

下面的代码会如你所愿:

public BigInteger toBigInteger(String foo)
{
    return new BigInteger(foo.getBytes());
}

public String fromBigInteger(BigInteger bar)
{
    return new String(bar.toByteArray());
}

但是我不明白您为什么需要这样做,我很想听听您的解释。

【讨论】:

  • 这看起来很棒,我希望它有效。我会尝试一下,然后让你知道结果。谢谢。
  • 不错,伙计。非常感谢。
  • 编码应指定为 IMO - 这对于任何以 U+0000 开头的字符串都会中断。
  • 可能他需要它来加密。
  • 可以做类似的事情,但不是 biginteger 而是整数?
【解决方案2】:

忽略“你为什么要这样做?”

String foo = "some text";
byte[] fooBytes = foo.getBytes();
BigInteger bi = new BigInteger(fooBytes);

然后

foo = new String(bi.toByteArray());

从 cmets 编辑: 这是使用默认字符集。如果源 String 未通过您的默认编码,您可能需要为 getBytes()String 的构造函数指定适当的 Charset。如果您碰巧使用了第一个字节为零的字符集,那么这将失败。

【讨论】:

  • 从 String -> byte[] -> String 开始时,可​​能应该明确指定 UTF-8 作为字符集。它可能不是平台默认设置。
  • 应该明确明确指定 UTF-8。如果你以前导零结束,这将失败。
  • 我想过,但老实说它应该使用默认字符集。如果字符串 不是 UTF-8 怎么办?回复:前导零...什么字符集在第一个字节中使用零?我不知道。
  • @BrianRoach:每个构造良好的 Java 字符串都可以用 UTF-8 表示。并非所有编码都是如此。此外,如果 OP 需要在一台机器上加密并在另一台机器上解密,则编码可能会有所不同。 U+0000 是一个完全有效的 Unicode 字符。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多