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

Python中整数的Endianness

陶璞
2023-03-14

我正在开发一个程序,在这个程序中,我将一些数据存储在一个整数中,并按位进行处理。例如,我可能会收到数字48,我会一点一点地处理它。一般来说,整数的endian取决于整数的机器表示,但是Python是否能保证整数始终是小endian?或者我需要像在C中一样检查endianness,然后为这两种情况编写单独的代码吗?

我问这个问题是因为我的代码运行在一台Sun机器上,虽然它现在运行的机器使用的是英特尔处理器,但我将来可能不得不切换到一台带有Sun处理器的机器,我知道这是big endian。

共有3个答案

衡翰翮
2023-03-14

以下片段将告诉您系统默认值是否为小端(否则为大端)

import struct
little_endian = (struct.unpack('<I', struct.pack('=I', 1))[0] == 1)

但是请注意,这不会影响按位运算符的行为:1

张俊茂
2023-03-14

如果需要“按位”处理数据,则位字符串模块可能会对您有所帮助。它还可以处理平台之间的持久性。

struct模块是处理平台间端性的最佳标准方法。例如,这将使用本机endianness将整数1、2、3打包并解压为两个“短”和一个“长”(在大多数平台上为2和4字节):

>>> from struct import *
>>> pack('hhl', 1, 2, 3)
'\x00\x01\x00\x02\x00\x00\x00\x03'
>>> unpack('hhl', '\x00\x01\x00\x02\x00\x00\x00\x03')
(1, 2, 3)

要以编程方式检查平台的endianness,您可以使用

>>> import sys
>>> sys.byteorder

它将返回“big”“little”

薄鸿远
2023-03-14

Python的int与它运行的处理器具有相同的endianness。struct模块允许您以本机、小端或大端的方式将字节blob转换为int(以及反之亦然,以及其他一些数据类型),具体取决于您选择的格式字符串:使用@或无端字符启动html" target="_blank">格式以使用本机端(以及本机大小——其他所有数据类型都使用标准大小),“~”对于本机,'

这是逐字节的,而不是逐位的;不确定在这种情况下逐位处理的确切含义,但我假设它可以类似地适应。

对于简单情况下的快速“批量”处理,还可以考虑数组模块——fromstringtostring方法可以快速对大量字节进行操作,而byteswap方法可以让您获得“other”endianness(本机到非本机,反之亦然),同样快速并且适用于大量项目(整个数组)。

 类似资料:
  • 本文向大家介绍Python中强大的整数,包括了Python中强大的整数的使用技巧和注意事项,需要的朋友参考一下 假设我们有两个正整数x和y,我们可以说一个整数对于i> = 0和j> = 0的某些整数等于x ^ i + y ^ j是强大的。我们必须找到一个包含所有整数的列表-值小于或等于bound的强大整数。 因此,如果输入像x = 2且y = 3且边界为10,则输出将为[2,3,4,5,7,9,1

  • 问题内容: 我正在开发一个程序,其中将一些数据存储为整数并按位进行处理。例如,我可能会收到数字48,该数字将逐位处理。通常,整数的字节序取决于整数的机器表示形式,但是Python是否做任何事情来确保ints始终为little- endian?还是我需要像在C中一样检查字节序,然后针对这两种情况编写单独的代码? 我问是因为我的代码运行在Sun机器上,尽管现在运行的代码使用Intel处理器,但将来我可

  • 问题内容: 在python或标准库中的某个地方是否存在整数平方根?我希望它是准确的(即返回一个整数),如果没有解决办法,可以吠叫。 此刻,我滚动了自己的幼稚: 但这很丑陋,我不太相信大整数。我可以遍历正方形,如果超出了该值,则放弃,但是我认为做这样的事情有点慢。另外我想我可能正在重新发明轮子,像这样的东西肯定已经存在于python中了… 问题答案: 牛顿的方法在整数上工作得很好: 这将返回的最大整

  • python或标准库中是否有整数平方根?我希望它是精确的(即返回一个整数),如果没有解决方案,就吠叫。 此刻我卷起了我自己天真的一个: 但是它很难看,而且我不相信它是大整数。我可以遍历这些方块,如果超过了这个值就放弃,但我认为这样做会有点慢。而且我想我可能会重新发明轮子,像这样的东西肯定已经存在于python中了。。。

  • 问题内容: 给定一个十进制整数(例如65),如何反转Python中的基础位?即。以下操作: 看来该任务可以分为三个步骤: 将十进制整数转换为二进制表示形式 反转位 转换回十进制 步骤#2和3似乎很简单(这个相关的步骤#2 SO问题),但我卡在步骤#1。步骤#1的问题是使用填充零来检索完整的十进制表示形式(即65 = 01000001,而不是1000001)。 我到处搜寻,但似乎找不到任何东西。 问

  • 问题内容: 在Python中,有没有一种方法可以获取可以使用的最大整数?是否有一些像INT_MAX这样的预定义常量? 问题答案: Python具有任意精度的整数,因此没有真正的固定最大值。您仅受可用内存的限制。 在Python 2中,有两种类型,int和long。ints使用C类型,而longs是任意精度。您可以使用查找最大值int。但是int会自动将提升为long,因此您通常不必担心: 工作正常