7

7天刚学会Python 3,感觉对字节串的理解有点坑。在 Python 3 中,假设我有一个 byte string b'1234'。它的迭代器返回整数:

Python 3.2.3 (default, May 26 2012, 18:49:27) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.

>>> for z in b'1234':
...   print(type(z))
... 
<class 'int'>
<class 'int'>
<class 'int'>
<class 'int'> 

我可以在字节字符串中找到一个整数(的定义in是它搜索相等):

>>> 0x32 in b'1234'
True

但是,我想在字节字符串中找到给定整数的索引。bytes.index需要一个子字符串:

>>> b'1234'.index(b'2')
1

现在,如果我有一个我想找到的变量x,这是我想出的最好的:

>>> x = 0x32
>>> b'1234'.index(bytes([x]))
1

我知道 Python 比这更优雅。我显然遗漏了一些明显的东西。除了创建单个整数的序列之外,还有什么更简单的方法来做到这一点?或者真的是这样吗?

4

3 回答 3

7

是的,这就是这样做的方法。

它与根据代码点在字符串中搜索字符的方式没有太大区别:

x = 0x32
i ='1234'.index(chr(x))
于 2012-06-06T23:17:58.073 回答
0

另外,请查看 Mark Pilgrim 的Dive Into Python 3,第4 章。字符串,第4.6 节。字符串与字节。它很好地解释了旧的 Python 2.x 字符串(在 Python 3 中成为字节类型)有哪些问题,以及新的 Python 3字符串在原则上有何不同。

于 2012-06-07T07:42:53.297 回答
0
>>>> bytearray(b'12345').index(0x32)
1
>>>> bytearray(b'12345').index(b'2')   
1
>>>> 
于 2021-04-29T05:16:10.463 回答