java - 为什么 C# 和 Java BigInteger 转换 byte[] 的方式不同?

标签 java c# biginteger

这是Java代码:

new BigInteger("abc".getBytes()).toString();
结果是 6382179 .
我想在 C# 中得到相同的结果,但是当我使用以下代码时:
(new System.Numerics.BigInteger(System.Text.Encoding.ASCII.GetBytes("abc"))).ToString();
我收到 6513249 .
如何在 C# 中以与 Java 相同的方式转换字符串?

最佳答案

C# BigInteger 将字节数组视为小端:

Parameters

value Byte[]

An array of byte values in little-endian order.


而Java的 BigInteger 将字节数组视为大端:

Translates a byte array containing the two's-complement binary representation of a BigInteger into a BigInteger. The input array is assumed to be in big-endian byte-order: the most significant byte is in the zeroth element.


所以你需要reverse the byte array获得与使用其他语言相同的结果。
还要注意 Java 的 String.getBytes使用默认编码,可能不是 ASCII。你应该使用
StandardCharsets.US_ASCII.encode("abc").array()
// or
"abc".getBytes(StandardCharsets.US_ASCII)
获取与 C# 代码相同的字节集。

关于java - 为什么 C# 和 Java BigInteger 转换 byte[] 的方式不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63203282/

相关文章:

ruby-on-rails - rails : How to use BIGINT as Primary Key

java - 向每个 listView 元素添加一个删除按钮

java - 构造函数可以抛出运行时异常吗?

java - BufferedReader 不读取整个文本文件

c# - 我们应该在 C++ 中使用装饰器模式吗?

c# - 舍入浮点值

Java:将 BigInteger 除以 3/Base 3 表示

java - JVM字节码输出

C# 解析日期和时间

java - 序列化 BigInteger : signum-magnitude mismatch