gpt4 book ai didi

python - Cython 可以将 int 65 转换为 char 'A' 吗?

转载 作者:行者123 更新时间:2023-12-01 02:47:20 25 4
gpt4 key购买 nike

%%cython
import cython
cdef int k = 65
cdef unsigned char kk = cython.cast("char", k)
print kk

结果是65。我已经尝试过<char>将 65 转换为 'A'

有人有什么想法吗?我目前正在 Ipython 笔记本中工作。

提前谢谢您!!

[已编辑]我为这个问题添加了第一个动机。

在c中,

int i = 65;
char c = i;
printf("%c", c); //prints 'A'

因为 char 'A' 已经是 int 了,如果我理解正确的话

但是在 Cython 中,

%%cython
import cython
cdef int k = 65
cdef char kk = cython.cast("char", k)
print <char>kk, <int>kk

相同的结果。

最佳答案

Python 没有真正的字符类型。 Python 有字符串。 ord() 函数的工作原理是将 1 个字符的字符串作为函数参数,如果字符串的长度较长,则会抛出错误。

在幕后,所有 ord() 真正所做的只是将 char 转换为 int。在 C 中,我可以编写一个像这样的简单函数:

#include <string.h>         // for strlen

int c_ord(const char* string)
{
// declare our variables
size_t length;
int ret;

// check the length
// note that Python actually stores the length,
// so this wouldn't be done in real code.
// This is here for example
length = strlen(string);
if (length != 1) {
// invalid length, set a dummy placeholder
ret = -1;
} else {
// just grab our value
ret = string[0];
}

return ret;
}

请注意,ord() 所做的一切都是获取精确值,只是获取字符,而不是字符串表示形式。 Cython 正在做的是真正的行为:将 char 视为整数,因此打印出它的整数值。要将字符视为字符串,我们可以创建一个字符数组,并让 Python 知道它是一个字符串。内置方法 chr 在幕后为我们所有人完成此操作。

%%cython
import cython
cdef int k = 65
print chr(k)

要在 Cython 中编写一个简单的方法来创建以 null 结尾的 C 字符串,并可选择将其转换为 Python 字符串,我们可以执行以下操作:

Python 没有真正的字符类型。 Python 有字符串。 ord() 函数的工作原理是将 1 个字符的字符串作为函数参数,如果字符串的长度较长,则会抛出错误。

在幕后,所有 ord() 真正所做的只是将 char 转换为 int。在 C 中,我可以编写一个像这样的简单函数:

#include <string.h>         // for strlen

int c_ord(const char* string)
{
// declare our variables
size_t length;
int ret;

// check the length
// note that Python actually stores the length,
// so this wouldn't be done in real code.
// This is here for example
length = strlen(string);
if (length > 1) {
// invalid length, set a dummy placeholder
ret = -1;
} else {
// just grab our value
ret = string[0];
}

return ret;
}

请注意,ord() 所做的一切都是获取精确值,只是获取字符,而不是字符串表示形式。 Cython 正在做的是真正的行为:将 char 视为整数,因此打印出它的整数值。要将字符视为字符串,我们可以创建一个字符数组,并让 Python 知道它是一个字符串。内置方法 chr 在幕后为我们所有人完成此操作。

%%cython
import cython
cdef int k = 65
print chr(k)

要编写一个简单的扩展来执行 chr() 并创建一个以 null 结尾的字符串(通常称为 C 字符串),我们可以编写以下代码。

%%cython
# imports
import cython
from libc.stdlib cimport malloc, free

# create null-terminated string, or a C-string
cdef char* c_string = <char*>malloc(2) # only need 2
c_string[0] = 65 # 'A'
c_string[1] = 0 # '\0', null-termination
# ... do what we want with the C-string

# convert to Python object
cdef bytes str = c_string

# remember to free the allocate memory
free(c_string)

# use Python object
print(str)

关于python - Cython 可以将 int 65 转换为 char 'A' 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45142208/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com