[英]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.