在 Cython 的字符串中循环数据

Loop data in Cython's string

我有一个 string 数据类型变量 x:

print(x)

>>> b'011010000110010101101100011011000110111100100000011101110110111101110010011011000110010000001010'

我正在做这个

cdef int data
for data in x:
        print(data)


>>> 48
    49
    49
    48
    49

etc...

为什么 4849?是因为这个数据是bytes因为c++的cdef string吗?

我想要类似的东西

cdef int data
for data in x:
        print(data)


>>> 0
    1
    1
    0
    1

etc...

我应该怎么做?顺便提一句。我想在我的代码中将此 0/1 转换为 False/Truelist(或 vector[bool])。如果可能的话...谢谢

正常情况下是这样的Python


for data in x:
    final_list.append(bool(int(data)))

print(final_list)
>>> [False, True, True etc...] # 0 = False, 1 = True

我不太熟悉 Cython,但这是标准 Python 程序的字节对象的预期行为。 bytestring b'012' 有三个条目。第一个不是零字节;它是数字 0 的 ascii 码。与其他字节类似。

要使字节实际为 0 和 1,您可以这样做:

>>> a = b'0110'.replace(b'0', b'\x00').replace(b'1', b'\x01')
>>> a
b'\x00\x01\x01\x00'
>>> list(a)
[0, 1, 1, 0]

这是使用 \x00\x01 对 0 和 1 的十六进制字节值进行转义的方法。

x 是字节格式。所以把它转换成字符串然后迭代

x= b'011010000110010101101100011011000110111100100000011101110110111101110010011011000110010000001010'
y=x.decode("utf-8") 

for b in y:
    print(b)