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

为什么在索引字节时得到整数?

邓欣德
2023-03-14
问题内容

我正在尝试获取python 3.4中字节字符串的第一个字符,但是当我对其进行索引时,我得到了int

>>> my_bytes = b'just a byte string'
b'just a byte string'
>>> my_bytes[0]
106
>>> type(my_bytes[0])
<class 'int'>

正如我期望的那样,这对我来说似乎并不直观b'j'

我发现我可以得到我期望的价值,但是对我来说,这就像是一个hack。

>>> my_bytes[0:1]
b'j'

有人可以解释为什么会这样吗?


问题答案:

bytes类型是Binary
Sequence类型
,并且明确记录为包含0到255范围内的整数序列。

从文档中:

字节对象是单个字节的不可变序列。

[…]

尽管字节文字和表示形式均基于ASCII文本,但字节对象实际上的行为就像不可变的整数序列,该序列中的每个值都受到限制,使得0 <= x < 256[。]

[…]

由于bytes对象是整数序列(类似于元组),因此对于bytes object bb[0]
它将是integer
,而b[0:1]将是bytes长度为1的对象。(这与文本字符串形成对比,在文本字符串中,索引和切片都会产生一个字符串长度1)。

大胆强调我的。注意,在序列类型中索引字符串不是一个例外。'abc'[0]给你一个str长度为1的物体;str是唯一始终包含其自身类型元素的序列类型。

这与其他语言如何处理字符串数据相呼应。在C语言中,unsigned char类型实际上也是0-255范围内的整数。unsigned如果您使用非限定char类型,则许多C编译器默认为,并且文本被建模为char[]数组。



 类似资料:
  • 问题内容: 我正在学习python并试图将github问题转换为可读形式。使用有关如何将JSON转换为CSV的建议?我想出了这个: 其中“ issues.json”是包含我的github问题的json文件。当我尝试运行它时,我得到 我在这里想念什么?哪些是“字符串索引”?我确定一旦完成这项工作,我就会遇到更多问题,但是就目前而言,我只是喜欢这个工作! 当我将陈述调整为 我得到的是…“问题”-所以我

  • 我编写了这段代码,将整个以10为基数的数字转换成二进制。我相信代码就是它所需要的一切,但我无法让工作。 我在这个网站和其他网站上花了几个小时,尝试了无数次的修改,但都没有用。 我已经让代码无错误地编译,但一旦我运行它并输入程序就会崩溃。 下面是代码: 这些是java在我输入数字时抛出的异常。 我希望这是足够的信息。

  • 问题内容: 我正在学习python并试图将github问题转换为可读形式。使用有关如何将JSON转换为CSV的建议?我想出了这个: 其中“ issues.json”是包含我的github问题的json文件。当我尝试运行它时,我得到 我在这里想念什么?哪些是“字符串索引”?我确定一旦完成这项工作,我还会遇到更多问题,但是就目前而言,我只是希望它可以工作! 当我将陈述调整为 我得到的是…“问题”-所以

  • 问题内容: 我有tyo字节变量 如果我将它们求和,则求和的值为整数。 为什么a + b是int? 问题答案: 因为Java语言规范这么说 对操作数(第5.6.2节)执行二进制数值提升。 请注意,二进制数值升级执行值集转换(第5.1.13节),并且可能执行拆箱转换(第5.1.8节)。 数字操作数上加法表达式的类型是其操作数的提升类型。 并且,关于数字促销, 扩展原语转换(第5.1.2节)适用于转换以

  • 我有 tyo 字节变量 如果我对它们求和,sum的值是整数。 为什么 b 是整数?

  • 我正在阅读Al Sweigart的书《自动化无聊的东西》,我对我遇到的索引错误感到不知所措。我正在使用PyPDF2尝试打开一个加密的PDF文档。我知道这本书是2015年的,所以我去了文档,看看我是否遗漏了什么,一切似乎都一样,至少据我所知。所以我不确定这里出了什么问题。 给予: 在问我的问题之前,我在谷歌上搜索了一下,找到了这个带有“建议修复”的链接。然而,我对这一点很陌生,想看看解决方法是什么。