【发布时间】:2016-03-10 00:54:36
【问题描述】:
我目前有以下操作:
a = 'cat\x00 '
格式为 unicode(默认 Python 3 字符串格式)。我希望将其转换为 ASCII。到目前为止,我已经尝试过:
a = bytes(a, 'ascii')
print(a)
OUT: b'cat\x00 '
使用 byes 命令将 'a' 转换为原始字符串,而不执行 '\x' 转义字符。执行十六进制转换后,有没有办法可以将“a”转换为 ASCII?
我需要 ctypes 的 'a' 值:
ct.c_char_p(a)
【问题讨论】:
-
您希望看到什么? NUL 是不可打印的字符。
-
我希望将 b'cat\x00 ' 作为 ASCII 发送到 ctypes。 ctypes 只能处理 ASCII 代码,但 Python 3 可以在 unicode 中执行字符串操作。因此,我不知道如何有效地将其转换为 ASCII 以供 ctypes 使用。当使用 ctypes 发送到 C 库时,所有像 'a' 这样的字符串将具有相同的长度。字符串末尾的 0x00 基本上会告诉 C 代码忽略该值之后的任何内容。
-
ctypes 不限于 ASCII。
c_char_p是指向任何以 null 结尾的字节字符串的指针。这可以是任何没有嵌入空值的单字节或多字节字符编码,例如 ASCII、Latin-1、Windows 代码页或 UTF-8。对于宽字符串(UTF-16 或 UTF-32),请使用c_wchar_p。请使用您尝试调用的 C 函数原型更新您的问题。 -
我目前无法访问 C 代码。我确实有 Python 2 中的 ctypes 代码,并且有效。我只是想将代码转换为 Python 3。Python 2 代码基本上将 'cat\x00' 作为
c_char_p的变量。 -
小修正。我正在使用 C++ 代码。不是 C 代码。我正在使用 c_types 从 DLL 文件中读取函数。
标签: python string python-3.x hex ctypes