簡體   English   中英

Python 中的大整數?

[英]BigInteger in Python?

我目前需要在 python 中編寫一個接收器程序,我想知道我做錯了什么。 在 java 中我有(顯然是代碼片段):

    byte[] fileSize = new byte[2];
    BigInteger bi = new BigInteger(fileSize);
    System.out.println("FileSize in Bytes: " + bi);

返回值: FileSize in Bytes: 27762

如果我打印出數組字節文件大小,我會得到以下值:

for(int u = 0; u < fileSize.length; u++){

    System.out.println(fileSize[u]);
            
}

這返回: 108 and the value 114.

我在 python 端收到這兩個值(它通過數據報發送到 Python 接收器)。 我如何組合它們或將它們轉換為值 27762,例如 BigInteger 在 Java 中返回的值? 有點迷失在這一點上。

任何想法都會很棒!

提前致謝!

長話短說:

>>> int.from_bytes([108, 114], 'big') # easy way
27762
>>> (108 << 8) + 114 # what you are doing under the hood
27762

長答案:

您在 Python 中查找的操作稱為按位操作。

本質上,您希望將兩個值作為二進制打包在一起。

108的二進制是1101100 114的二進制是1110010

要將它們一起打包成 Python 回到它們的 bigInt 等價物,你必須移動 108 為 114 騰出空間。你將它向左移動 8 個二進制位置

二進制的108,移動8位就是110110000000000,現在我們把它們打包在一起:

 110110000000000
+        1110010
----------------
 110110001110010

將 110110001110010 轉換回十進制,我們得到 27762

所以本質上你想要的操作是:

>>> (108 << 8) + 114
27762

您必須自己找出邊緣情況的詳細信息,例如您的數字是否需要移動的字節數多於一個字節(也就是代碼 108 << 8 中的 8 位)

我能夠修復它,以防萬一有人遇到同樣的問題:

在 Python:

test = []

test.append(108)
test.append(114)


print(int.from_bytes(test, 'big'))

返回值 27762,與 Java 中的 BigInteger 轉換完全相同。

干杯!

暫無
暫無

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

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