在python中,我得到了一个64位整数。该整数是通过采用几个不同的8位整数并将它们混搭为一个64位巨型整数而创建的。再次将它们分开是我的工作。
例如:
Source number: 2592701575664680400
Binary (64 bits): 0010001111111011001000000101100010101010000101101011111000000000
int 1: 00100011 (35)
int 2: 11111011 (251)
int 3: 00100000 (32)
int 4: 01011000 (88)
int 5: 10101010 (170)
int 6: 00010110 (22)
int 7: 10111110 (190)
int 8: 00000000 (0)
所以我想做的是获取我的源代码2592701575664680373
并返回一个长度为8的数组,其中数组中的每个int都是上面列出的int。
我打算使用struct
,但老实说,阅读文档并不清楚我将如何实现。
在Python 2.x中,struct.pack
返回一个字节字符串。将其转换为整数数组很容易。
>>> bytestr = struct.pack('>Q', 2592701575664680400)
>>> bytestr
'#\xfb X\xaa\x16\xbd\xd0'
>>> [ord(b) for b in bytestr]
[35, 251, 32, 88, 170, 22, 189, 208]
struct
python中的模块用于将python对象转换为字节字符串,通常根据C结构打包规则进行打包。struct.pack
采用格式说明符(一个字符串,该字符串描述应如何布局结构的字节)和一些python数据,并将其打包为字节字符串。struct.unpack
进行相反的处理,采用格式说明符和字节字符串,然后再次以python对象的格式返回未打包数据的元组。
所使用的格式说明符分为两部分。前导字符指定字符串的字节序(字节顺序)。以下字符指定要打包或解压缩的结构的字段的类型。因此,'>Q'
意味着将给定数据打包为big-
endian unsigned long long
。要以相反的顺序获取字节,可以改用<
little-endian。
最后的操作是列表理解,它遍历字节字符串的字符并使用ord
内置函数来获取该字符的整数表示。
最后说明:Python实际上没有整数大小的概念。在2.x中,int
它的长度限制为32位,并且long
大小不受限制。在3.x中,这两个被统一为一个类型。因此,即使此操作保证可以提供仅占用一个字节的整数,但如果您在其他操作中使用python,则注意python仍将迫使所得整数保持这种方式。
问题内容: 我有一个接收a的函数,但是我所拥有的a是进行此转换的最佳方法是什么? 我想我可以走很长一段路,然后将其放入字符串并放入字节中,但这听起来很难看,而且我认为还有更好的方法可以做到。 问题答案: 我同意Brainstorm的方法:假设您要传递机器友好的二进制表示形式,请使用该库。OP建议可能会有一些开销。纵观源的实施,我看到它做了一些运行时的决策最大的灵活性。 对?Write()接受一个非
问题内容: 我知道Java不允许无符号类型,所以我想知道它如何将整数转换为字节。假设我有一个值为255的整数a,并且将该整数转换为一个字节。该值表示在字节11111111中吗?换句话说,该值是否更多地视为带符号的8位整数,还是仅直接复制该整数的后8位? 问题答案: 这称为缩小原始转换。根据规格: 将有符号整数缩小为整数类型 T会 简单地丢弃除 n个 最低阶位以外的所有位,其中 n 是用于表示类型
问题内容: 这是user2486所说的之后的当前代码。 我在使用ns时遇到此错误:UnboundLocalError:分配前引用了本地变量’ns’ 问题答案: 考虑一下此附加的伪代码和提示(其中一些是有效的Python,一些不是有效的,但有注释)。
问题内容: 将转换为的快速方法是什么? 例如 问题答案: 看看ByteBuffer类。 设置字节顺序保证了,,和。 或者,你可以手动执行以下操作: 该班是专为尽管这样的脏手任务。实际上,私有定义了以下辅助方法:
问题内容: 我发现的最短方法是: 我特别关注两个因素:可读性和可移植性。对于Python 3,第二种方法很难看。但是,我认为它可能是向后兼容的。 我错过了一种更短,更干净的方式吗?我目前使用一个lambda表达式来使用新功能对其进行修复,但这也许是不必要的。 问题答案: 答1: 要将字符串转换为Python 2或Python 3中的字节序列,请使用字符串的方法。如果您不提供编码参数,则该参数对于数
问题内容: 有没有人能将不安全的字符串转换为? 该字符串通常回来为:或类似的东西。 在这种情况下,我要。如果我想。我从不希望该方法失败,但是我不愿意尝试,除非通过它只是为了隐藏错误(以防万一发生极端情况)。 问题答案: 在这种情况下,您确实有一种避免/的方法,尽管我不建议这样做(假设您的输入字符串名为,并且您处于必须返回某些内容的函数中): 将在部分就是你回什么是你想要比如说,如果是,空,全空间,