当前位置: 首页 > 面试题库 >

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

南宫天逸
2023-03-14
问题内容

我发现的最短方法是:

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:http://ideone.com/Y05zVY
  • Python 3:http://ideone.com/XqFyOj

在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'


 类似资料:
  • 问题内容: 我有一个接收a的函数,但是我所拥有的a是进行此转换的最佳方法是什么? 我想我可以走很长一段路,然后将其放入字符串并放入字节中,但这听起来很难看,而且我认为还有更好的方法可以做到。 问题答案: 我同意Brainstorm的方法:假设您要传递机器友好的二进制表示形式,请使用该库。OP建议可能会有一些开销。纵观源的实施,我看到它做了一些运行时的决策最大的灵活性。 对?Write()接受一个非

  • 问题内容: 将转换为的快速方法是什么? 例如 问题答案: 看看ByteBuffer类。 设置字节顺序保证了,,和。 或者,你可以手动执行以下操作: 该班是专为尽管这样的脏手任务。实际上,私有定义了以下辅助方法:

  • 问题内容: 我在标准库上进行了查找,但未发现类似问题。因此,有没有一种方法可以在不滚动我自己的函数的情况下进行以下操作?如果没有内置的方法,那么如果有人编写了精美的函数,奖励积分就可以了。 问题答案: 将用作:

  • 问题内容: 如何在JavaScript中将字符串转换为整数? 问题答案: 最简单的方法是使用本机函数: 如果这对您不起作用,则有 parseInt , 一元加号 , 带有floor的parseFloat 和 Math.round 方法。 parseInt: 一元加号,如果您的字符串已经是整数形式: 如果您的字符串是浮点数或可能是浮点数,并且您想要一个整数: 或者,如果您要多次使用Math.floo

  • 问题内容: 有什么方法可以将null转换为Integer。null实际上是一个字符串,我在我的服务层中传递该字符串,将其接受为整数。因此,每当我尝试将null字符串强制转换为Integer时,都会引发异常。但是我必须将null转换为Integer。 问题答案: 您 不能 从String强制转换为Integer。但是,如果您尝试将字符串转换为整数,并且必须提供处理字符串的实现,请查看以下代码片段: