python - 在 Python 中打印 C 字符串

标签 python c

我想使用 Python print 语句打印 C 字符串。数组 vendorName 包含 ASCIIZ C 字符串 A ANTHONY & SONS INC。我的动机是将 C 字符串转换为 Python 字符串,这样我就可以使用所有 Python 字符串方法。

我有一个结构:

class _vendrRecord(Structure):
    _pack_ = 1                                            # pack the struct
    _fields_ = [
        ("vendorName"            ,c_ubyte *(40 + 1)),
        ("ytdPayments"           ,c_ulong),
        ]

我想打印 ASCIIZ 字符串“vendorName”。

我可以像这样使用 printf 打印它:

printf(b"%s\n", vendrRecord.vendorName)

我试过这个 print(vendrRecord.vendorName) 但它只打印地址。根据 Jamie Nicholl-Shelley 提供的信息,我尝试了 print(cast(vendrRecord.vendorName,c_char_p).value) 但结果是 b'A ANTHONY & SONS INC'。我只想 A ANTHONY & SONS INC

请注意 print(vendrRecord.ytdPayments) 打印正确。

最佳答案

看起来您已经了解了大部分内容,只是对字符串编码感到困惑。您已成功获得 bytes 对象:

>>> v.vendorName
<__main__.c_ubyte_Array_41 object at 0xb0994a04>
>>> cast(v.vendorName, c_char_p)
c_char_p(176882328)
>>> cast(v.vendorName, c_char_p).value
b'A ANTHONY & SONS INC'

bytes object 就像它听起来的样子,只是一个字节序列——只是为了方便用户,它以类似字符串的方式显示。与字符串不同,每个组件都是一个整数:

>>> cast(v.vendorName, c_char_p).value[7]
78

但是因为我们知道我们使用的是 ascii,所以我们可以解码这个字节对象为 Python 字符串,然后对它使用所有常用的方法:

>>> s = cast(v.vendorName, c_char_p).value.decode("ascii")
>>> s
'A ANTHONY & SONS INC'
>>> type(s)
<class 'str'>
>>> s.lower()
'a anthony & sons inc'

关于python - 在 Python 中打印 C 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34698260/

相关文章:

python - 如何在没有 GPU 的情况下运行 tensorflow?

c - 如何计算输出?

c++ - 如何禁用 GTK 拖放?

c - 序列化其中包含 union 和结构的结构

python - Python 中的 XML <arg> 值替换

python - 创建多人二十一点游戏

python - 无法让pygame字体在图像上呈现

python - “模块”对象不可调用。执行 AI 文件时出错

c - 为什么三元运算可能未定义

c - 如何在C中编辑txt文件中的一行?