当前位置: 首页 > 知识库问答 >
问题:

Python中的BigInteger?

归俊捷
2023-03-14

我现在需要用python编写一个接收器程序,我想知道我做错了什么。在java中,我有(显然是代码片段):

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

它返回的值为:文件大小(字节):27762

如果我打印出数组字节文件大小,我会得到以下值:

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

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

这会返回:108和值114。

我在python端接收这两个值(通过数据报发送给python接收器)。如何组合它们或将它们转换为值27762,就像Java中的BigInteger返回值一样?有点迷茫了。

任何想法都会很棒!

提前感谢!

共有2个答案

巫马盛
2023-03-14

我能够修复它,以防有人遇到同样的问题:

在Python中:

test = []

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


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

其中返回了27762的值,与Java中的BigInteger转换完全相同。

干杯

史昱
2023-03-14
>>> 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

将1101100011110010转换回十进制,我们得到27762

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

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

对于边缘情况,您必须自己弄清楚细节,例如,如果您的数字需要的字节数多于一个字节(即代码108中的8位)

 类似资料:
  • 问题内容: 考虑以下代码片段: 我期望创建一个具有以下两个功能的字典: 但看起来生成的两个函数完全相同: 我真的不明白为什么。你有什么建议吗 ? 问题答案: 你需要为创建的每个函数绑定。一种方法是将其作为具有默认值的参数传递: 现在,函数内部的使用了参数,即使它具有相同的名称,并且在创建函数时会评估该参数的默认值。为了帮助你看到以下内容: 请记住默认值是如何工作的,例如可变对象(如列表和字典)的工

  • 问题内容: OpenCV python包装器中是否有任何功能与OpenCV 2中Mat的convertTo方法具有相同的功能? 我基本上想在python中调用此函数 哪里是灰度图像。 我已经通过将dst参数保持为CV_32FC1类型来使用cv.ConvertScale,但是我正在尝试使python代码尽可能与cv2保持一致。有什么线索吗? 问题答案: 您可以为此简单地使用Numpy函数。 例如:

  • 问题内容: 现在,我将elixir与mysql数据库一起使用,并将redispy与redis一起使用,并在所有位置选择UTF-8。我想用中文写一些数据,但是我得到的是这样的: 在我将该字典存储到redis并通过redispy将其取出后,它变为: 我知道如果我加入之前,并打印它会守我,但有一个功能或另一个解决这个问题? 问题答案: 后者看起来像json,请先尝试对其进行解码:

  • 问题内容: 你好,我有两个python文件(命名管道) py 该管道创建一个命名管道“ test_pipe”,并将数据写入该管道。 b.py 我能够毫无问题地获取数据。但是我得到的数据是这种形式的(我已经用双引号括住了输出) 我无法弄清楚为什么所有这些变量都被打印(<,0,>)在a.py或b.py中的问题在哪里以及如何解决这个问题。 问题答案: 这就是回报。它返回结果和读取数据的元组。您应该验证结

  • 断言是一种完整性检查,您可以在完成程序测试后打开或关闭。 想到断言的最简单方法是将它比作一个raise-if语句(或者更准确,即使是if-if-not语句)。 测试表达式,如果结果为false,则引发异常。 断言由assert语句执行,这是Python的最新关键字,在1.5版中引入。 程序员经常在函数的开头放置断言以检查有效输入,并在函数调用之后检查有效输出。 The assert 语句 遇到as

  • 问题内容: 如果路径不存在,我正在尝试创建目录,但是!(不是)运算符不起作用。我不确定如何在Python中取反…执行此操作的正确方法是什么? 问题答案: Python中的求反运算符为。因此,只需将替换为即可。 对于您的示例,请执行以下操作: 对于您的特定示例(如Neil在评论中所述),您不必使用模块,只需使用即可获得所需的结果,并添加了异常处理优势。 例: