java - 为什么 C# 和 Java BigInteger 转换 byte[] 的方式不同?
问题描述
这是Java代码:
new BigInteger("abc".getBytes()).toString();
结果是6382179。
我希望在 C# 中得到相同的结果,但是当我使用以下代码时:
(new System.Numerics.BigInteger(System.Text.Encoding.ASCII.GetBytes("abc"))).ToString();
我得到6513249。
如何以与 Java 相同的方式在 C# 中转换字符串?
解决方案
C#BigInteger
将字节数组视为 little-endian:
参数
价值
Byte[]
以小端顺序排列的字节值数组。
而 JavaBigInteger
将字节数组视为大端:
将包含 BigInteger 的二进制补码表示的字节数组转换为 BigInteger。输入数组假定为大端字节序:最高有效字节位于第零个元素中。
因此,您需要反转字节数组以获得与使用其他语言相同的结果。
另请注意,JavaString.getBytes
使用默认编码,可能不是 ASCII。你应该使用
StandardCharsets.US_ASCII.encode("abc").array()
// or
"abc".getBytes(StandardCharsets.US_ASCII)
获取与 C# 代码相同的字节集。
推荐阅读
- sql-server - Azure SQL Server 读取横向扩展性能
- python - 设置 python 3.7 虚拟环境的问题
- r - 具有多因子条件的行总和
- symfony - 从 Symfony 4.3 开始不支持在多行块中映射键,并将在 5.0 中抛出 ParseException
- config - 启动期间无法运行 powerline-config(在 .tmux.conf 中)
- animation - 颤动底部导航栏中更快的滑动过渡
- cbor - 使用 Zephyr 构建 tinycbor 模块
- arrays - 将 Google 表格中的多个值与循环的 App Script 进行比较
- java - 为什么这个函数会继续运行?
- tfs - 您可以在 TFS 中发布网站的部分内容吗?