python - 将一些 C 函数转换为 Python

标签 python c linux encryption

<分区>

我需要将这个 C 语言的函数转换为 Python:

void myencrypt(char password[],int mkey)
{
    unsigned int i;
    for(i=0;i<strlen(password);++i)
    {
    password[i] = password[i] - mkey;
    }
}

我试过了,但是失败了...

def myencrypt(password, mkey):

    i = 0
    newpass = []

    for i in range(len(password)):
        newpass[i] = ord(password[i]) - mkey;

    return newpass

有什么帮助吗?

最佳答案

C 代码正在就地修改 password。因此,最接近的等价物是:

def myencrypt(password, mkey):
    for i in range(len(password)):
        password[i] = chr(ord(password[i]) - mkey)

假设 password 是字符的 list,而不是字符串。

另外,请注意我正在对每个 ord(password[i]) - mkey 的结果调用 chr,因为否则你将用一个数字——例如,myencrypt(['a'], 32) 会给你 [65] 而不是 ['A'] . (这在 C 中不是必需的,因为 65'A' 在 C 中是相同的值。)

您更有可能希望使用一个字符串调用此函数,并返回一个字符串。您可以仍然使用 C 风格的就地功能来完成它,只需通过转换和转换回来:

def myencrypt(password, mkey):
    newpass = list(password)
    for i in range(len(newpass)):
        newpass[i] = chr(ord(newpass[i]) - mkey)
    return ''.join(newpass)

但是,这并不是一种非常 Pythonic 的做事方式。一个更惯用的解决方案是:

def myencrypt(password, mkey):
    return ''.join(chr(ord(ch) - mkey) for ch in password)

这提出了一个更普遍的观点:除了在非常微不足道的情况下,尝试直接“将 C 代码转换为 Python”不是一个好主意。相反,弄清楚 C 代码的作用,然后编写新的 Python 代码,以最适合 Python 的方式完成相同的任务,而不是采用 C 代码的方式。

关于python - 将一些 C 函数转换为 Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14866307/

相关文章:

c - 使用 GDB 调试器查看隐藏代码

c - 执行的线程多于创建的线程

python - 多进程和多进程没有文件 IO : OSError: [Errno 24] Too many open files

python - 获取字符串的unicode字符

c - minGW 下 _rotl 性能较差

c - 我如何使用此客户端程序访问 tomcat 资源?

linux - 如何在 PNG 图像中设置精确坐标?

java - 用于 Selenium WebDriver 的 PhantomJS 2.5.0-beta 在 Linux 中不工作

python - 如何循环遍历 pandas groupby 并操作数据?

python - GraphLab Create 安装错误 - Python 3.5.2