gpt4 book ai didi

Python 2,3 将整数转换为 "bytes"干净

转载 作者:IT老高 更新时间:2023-10-28 21:43:36 29 4
gpt4 key购买 nike

我找到的最短方法是:

n = 5

# Python 2.
s = str(n)
i = int(s)

# Python 3.
s = bytes(str(n), "ascii")
i = int(s)

我特别关心两个因素:可读性和可移植性。对于 Python 3,第二种方法很难看。不过,我认为它可能是向后兼容的。

有没有我错过的更短、更清洁的方法?我目前制作了一个 lambda 表达式来用一个新函数来修复它,但这可能是不必要的。

最佳答案

答案 1:

要在 Python 2 或 Python 3 中将字符串转换为字节序列,请使用字符串的 encode 方法。如果您不提供编码参数,则使用 'ascii',这对于数字数字总是足够好的。

s = str(n).encode()

在 Python 2 中 str(n) 已经产生了字节; encode 将进行双重转换,因为此字符串被隐式转换为 Unicode 并再次转换回字节。这是不必要的工作,但它是无害的,并且与 Python 3 完全兼容。


答案 2:

以上是实际提出的问题的答案,即以人类可读的形式生成一串 ASCII 字节。但由于人们不断来到这里试图获得不同问题的答案,我也会回答这个问题。如果您想将 10 转换为 b'10' 使用上面的答案,但如果您想将 10 转换为 b'\x0a\x00\x00\x00' 然后继续阅读。

struct module专门用于在各种类型及其作为字节序列的二进制表示之间进行转换。从类型到字节的转换是用 struct.pack 完成的。 .有一个格式参数 fmt 确定它应该执行的转换。对于一个 4 字节的整数,对于有符号的数字是 i,对于无符号的数字是 I。有关更多可能性,请参阅 format character table ,并查看 byte order, size, and alignment table当输出超过一个字节时的选项。

import struct
s = struct.pack('<i', 5) # b'\x05\x00\x00\x00'

关于Python 2,3 将整数转换为 "bytes"干净,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14043886/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com