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

Posted

技术标签:

【中文标题】如何在python中将dbus.Array从at解码为十六进制或字符串【英文标题】:how to decode dbus.Array fromat to hex or string in python 【发布时间】:2017-05-07 07:06:26 【问题描述】:

如何解码:

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

到 Python 代码中的 HEXString

【问题讨论】:

【参考方案1】:

正如DBus specification 所说,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]'

【讨论】:

您的第一个选项仅适用于 ASCII;它会很快被多字节 UTF-8 字符打破。请改用bytes(value).decode()。您的第三个选项实际上相当于单独的bytes(value)【参考方案2】:

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

    localFile = open ('/home/youruser/data.bin', 'wb')
    try:
        for byteValue in arrayValue:
            localFile.write(chr(byteValue))
    finally:
        localFile.close()

【讨论】:

以上是关于如何在python中将dbus.Array从at解码为十六进制或字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何在python中将单引号存储到postgres [重复]

如何在 Python 中将日期时间转换为 GMT +7?

在 Python 中将数据写入 zip 存档

在 Eclipse(Pydev) 中将命令行参数传递给 Python 脚本

如何在python中将日期从外部文件导入sql时处理引号('')?

如何在 C 中将链接列表解连接为 3 个单独的链接列表?