Python 2,3干净地将整数转换为“字节”

发布于 2021-01-29 17:46:24

我发现的最短方法是:

n = 5

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

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

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

我错过了一种更短,更干净的方式吗?我目前使用一个lambda表达式来使用新功能对其进行修复,但这也许是不必要的。

关注者
0
被浏览
47
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    答1:

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

    s = str(n).encode()
    

    在Python
    2中str(n)已经产生了字节;该encode会是一个双转换与此字符串隐式转换为Unicode,然后再返回到字节。这是不必要的工作,但它无害且与Python
    3完全兼容。


    答案2:

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

    struct模块专门用于在各种类型及其二进制表示形式(字节序列)之间进行转换。从类型到字节的转换是通过完成的struct.pack。有一个format参数fmt确定应执行的转换。对于4字节整数,它将i用于有符号数或I无符号数。有关更多可能性,请参见格式字符表,如果输出大于单个字节,请参见字节顺序,大小和对齐表以获取选项。

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


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看