Python 3.x 如何在python中将dbus.Array从at解码为十六进制或字符串

Python 3.x 如何在python中将dbus.Array从at解码为十六进制或字符串,python-3.x,dbus,Python 3.x,Dbus,如何解码: dbus.Array([dbus.Byte(1), dbus.Byte(35)], signature=dbus.Signature('y')) 在Python代码中设置为十六进制或字符串 也许你想做的是把它转换成字节;下面您可以看到我是如何将其写入二进制文件的 localFile = open ('/home/youruser/data.bin', 'wb') try: for byteValue in arrayValue:

如何解码:

dbus.Array([dbus.Byte(1), dbus.Byte(35)], signature=dbus.Signature('y'))

在Python代码中设置为十六进制字符串

也许你想做的是把它转换成字节;下面您可以看到我是如何将其写入二进制文件的

    localFile = open ('/home/youruser/data.bin', 'wb')
    try:
        for byteValue in arrayValue:
            localFile.write(chr(byteValue))
    finally:
        localFile.close()
正如上面所说,
y
表示字节。 所以
dbus.Array([…],signature=dbus.signature('y'))
是一个字节数组

让我们考虑一下这个值:

value = dbus.Array([dbus.Byte(76), dbus.Byte(97), dbus.Byte(98), dbus.Byte(65), dbus.Byte(80), dbus.Byte(97), dbus.Byte(114), dbus.Byte(116)], signature=dbus.Signature('y'))
  • 如果您知道您的值包含字符串

    print("value:%s" % ''.join([str(v) for v in value]))
    # Will print 'value:LabAPart'
    
  • 对于字节数组:

    print("value:%s" % [bytes([v]) for v in value])
    # Will print 'value:[b'L', b'a', b'b', b'A', b'P', b'a', b'r', b't']'
    
    print("value:%s" % [int(v) for v in value])
    # Will print 'value:[76, 97, 98, 65, 80, 97, 114, 116]'
    
  • 对于整数数组:

    print("value:%s" % [bytes([v]) for v in value])
    # Will print 'value:[b'L', b'a', b'b', b'A', b'P', b'a', b'r', b't']'
    
    print("value:%s" % [int(v) for v in value])
    # Will print 'value:[76, 97, 98, 65, 80, 97, 114, 116]'
    

您的第一个选项仅适用于ASCII;它将很快以多字节UTF-8字符中断。尝试
字节(值)。改为解码()。您的第三个选项实际上仅相当于
字节(值)