【问题标题】:How to get a single byte in a string of bytes, without converting to int如何在不转换为 int 的情况下获取一串字节中的单个字节
【发布时间】:2016-01-11 08:20:49
【问题描述】:

我有一个像str_of_bytes = b'\x20\x64\x20' 这样的字节串,我想从中提取第二个元素。 如果我做str_of_bytes[1],我得到的是int100。 如何获得b'\x64',而无需将int 重新转换为bytes

【问题讨论】:

标签: python python-3.x byte


【解决方案1】:

将其提取为一个范围:

str_of_bytes[1:2]

结果:

b'd'

这和b'\x64'一样

请注意,我假设您使用的是 Python 3。Python 2 的行为有所不同。

【讨论】:

  • 那我就不明白了,为什么str_of_bytes[1]在这种情况下不起作用?不是str_of_bytes[1:2] == str_of_bytes[1]吗?
  • @KevinGuan 在 python 2 vs 3 中检查这个:print(str_of_bytes[1:2], type(str_of_bytes[1:2]))print(str_of_bytes[1], type(str_of_bytes[1]))
  • @KevinGuan 在 Python 3 中它们不一样。如 OP 所述,使用单个索引值会导致 int。另一方面,范围产生bytes
  • 这解决了问题。尽管我想知道:这是有效处理单个字节的最佳方法吗?我正在使用bytes 类型,因为我认为它比将值转换为int 更有效,这是真的吗?
  • 我认为bytes 的主要动机是能够对文件执行 I/O,而无需对数据进行字符串解释。它们基本上是小(字节大小)整数(在 0-255 范围内,即 8 位数据)的打包数组。它们节省内存,但如果您真的想解释或操作数据(而不是简单的副本),您将需要解压缩它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多