【问题标题】:How can i modify a byte array?如何修改字节数组?
【发布时间】:2018-11-13 17:38:14
【问题描述】:

我正在阅读有关字节和字节数组的内容。我读到字节数组可变类型! 所以,当我试图修改它时,我收到一条错误消息integer is required 我在这里遗漏了什么吗?以下是我的代码和错误

z=bytearray("hello world","utf-8")
z[0] ="H"

我收到以下错误

TypeError Traceback(最近调用 最后)在() ----> 1 z[0]="H"

TypeError:需要一个整数

【问题讨论】:

  • 你的意思是z[0] = ord('H')
  • 哦!所以,我必须给 ascii 值? @Norrius

标签: python arrays


【解决方案1】:

正如文档所说:

bytearray 类型是 整数 的可变序列,范围为 0

您可以使用字符串创建它的原因,因为每个字符都被转换为其 ASCII 整数 值。因此,当分配'H' 时,您实际上是指分配72

如果您希望能够分配字符,则只需先将每个字符传递给ord()

【讨论】:

  • 那么,我将如何修改它以使用 UTF-8 字符?
  • @Kalyan ASCII 是 Unicode 编码的子集,所以它已经是 UTF-8。
  • @Kalyan 不要使用bytearray!使用list
  • @Kalyan 它不是正在修改的字符串。这是一个bytearray。如果您从 C 或类似语言中知道,数组(通常)是可以索引的 整数 序列。 string 通常出现在高级语言中,但在基础级别,它是一个表示 ASCII 字符(UTF-8 子集)的 整数 数组。因此,如果您想要一个可以按索引更改字符的字符串,最好使用单个字符的list,例如:list("hello there") 给出['h', 'e', 'l', ...],因此您可以按索引修改字符,因为列表是可变的.
  • @Kalyan 哦,当您想将其转换回 string(用于更漂亮的打印等)时,您可以在空字符串上使用 join 方法:''.join(lst)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-27
  • 2011-11-22
  • 1970-01-01
  • 1970-01-01
  • 2016-01-20
  • 1970-01-01
  • 2012-11-30
相关资源
最近更新 更多