簡體   English   中英

為什么 C# 和 Java BigInteger 轉換 byte[] 的方式不同?

[英]Why do C# and Java BigInteger convert byte[] differently?

這是 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[]

以小端順序排列的字節值數組。

而 Java 的BigInteger將字節數組視為大端:

將包含 BigInteger 的二進制補碼表示的字節數組轉換為 BigInteger。 輸入數組假定為大端字節序:最高有效字節位於第零個元素中。

因此,您需要反轉字節數組以獲得與使用其他語言相同的結果。

另請注意,Java 的String.getBytes使用默認編碼,可能不是 ASCII。 你應該使用

StandardCharsets.US_ASCII.encode("abc").array()
// or
"abc".getBytes(StandardCharsets.US_ASCII)

獲得與 C# 代碼相同的字節集。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM