我想使用 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/