- 论坛徽章:
- 11
|
我定义了 m_string1 =create_string_buffer(b'\x11\x22\33\x44')
m_string2 =create_string_buffer(b'\x11\x22\33\x44')
请问怎么能打印出m_string1地址中的内容?
我试验了print(repr(m_string1.value))和print(repr(m_string1.raw))都不行,如何能打印出11223344这样的效果?
就是字节流打印成十六进制字符串吧,多种方法:- Python 3.3.5 (default, Mar 11 2014, 15:08:59)
- [GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.2.79)] on darwin
- Type "help", "copyright", "credits" or "license" for more information.
- >>> from ctypes import *
- >>> import codecs, binascii, base64
- >>> a = create_string_buffer(b'\x11\x22\x33\x44')
- >>> binascii.hexlify(a.value) # recommended
- b'11223344'
- >>> codecs.encode(a.value, 'hex_codec')
- b'11223344'
- >>> base64.b16encode(a.value)
- b'11223344'
- >>> bytes.fromhex(str(b'11223344', 'utf-8'))
- b'\x11"3D'
- >>> ''.join('{:02x}'.format(e) for e in a.value)
- '11223344'
- >>> bytes.fromhex('11223344')
- b'\x11"3D'
复制代码如果想比较m_string1和m_string2是否相等要怎样写?
我试验了print(m_string1 is m_string2) 输出的结果是false ,我想应该是地址关系吧,请问要怎么写呢?
两者确实是地址关系,但不可能相等,因为create_string_buffer的功能就是创建mutable buffer,并以char *供C函数使用,意味着create_string_buffer总是copy参数的内容,然后内部新建buffer,也就是create_string_buffer总是返回一个新的Python对象,id不一样,那么is自然是false。m_string1和m_string2内部是不能直接访问的,是给C用的,用m_string1.value和m_string2.value比较吧。
|
|