过去几天我一直在尝试Cython,我对c / cython处理字符串作为字符数组/指针的方式有一个简单的问题:
def function(char *string):
for i in xrange(len(string)):
print string[i]
print &string[i]
现在举例来说,当我编译并运行代码时,以"abc"
为参数,我得到以下答案:
97
ABC
98
BC
99
C
现在我的问题是:
string[i]
中每个字符的ascii值?i
的索引&string[i]
处打印出字符串的后缀?非常感谢。
答案 0 :(得分:1)
与Python 3 bytes
类似,当您在Cython中对char *
进行索引时,Cython treats the char
at that index as a numeric value, not text。这就是print string[i]
打印数字的原因。
print &string[i]
的行为是从C继承的。如果char *
指向以下以空字符结尾的字符串:
|
v
+-+-+-+-+
|a|b|c| |
+-+-+-+-+
然后&string[1]
是char *
,指向此处:
|
v
+-+-+-+-+
|a|b|c| |
+-+-+-+-+
也是以空字符结尾的字符串,其中包含字符bc
。当你print
时,Cython会打印bc
。
Cython docs建议不要使用char *
s:
一般来说:除非你知道自己在做什么,否则请尽量避免使用C字符串,而应使用Python字符串对象。