【问题标题】:How to take an integer array and convert it into other types?如何获取整数数组并将其转换为其他类型?
【发布时间】:2016-12-24 17:59:17
【问题描述】:

我目前正在尝试获取实际表示其他数据类型的整数数组并将它们转换为正确的数据类型。

例如,如果我有一个整数数组 [1196773188, 542327116],我发现这个整数数组表示来自其他函数的字符串,将其转换,并实现它表示字符串“DOUGLAS”。第一个数字转换为十六进制数 0x47554F44,第二个数字表示十六进制数 0x2053414C。使用十六进制到字符串转换器,它们分别对应于字符串“GOUD”和“SAL”,以小端方式拼写 DOUGLAS。字母在数组的各个元素中向后的方式可能源于以小端方式存储的字节,尽管我可能会弄错。

这些整数数组可以表示多种数据类型,包括字符串、布尔值和浮点数。

我需要使用 Python 2.7,所以很遗憾不能使用 bytes 函数。

有没有一种简单的方法可以将整数数组转换为其对应的数据类型?

【问题讨论】:

  • 整数列表应该以什么方式表示“DOUGLAS”?字符串和整数列表之间没有自然的默认对应关系。最有可能的是,执行此转换将需要一些您没有告诉我们的信息,并且您可能没有费心保留(在这种情况下,这是一个失败的原因)。
  • 第一个看起来你有一个列表:type([1196773188, 542327116]) -> <class 'list'> 第二个将一个数据转换为另一个的方法是有一些规则/过程来转换它。如果您知道[1196773188, 542327116] 如何转换为"DOUGLAS" 的规则,我会假设相同的转换过程适用于其他数据。虽然我并没有真正看到相关性。
  • 编辑解释为什么整数转换为“DOUGLAS”
  • 看看struct模块,它提供了二进制数据和其他数据类型之间的转换工具。
  • 您想知道如何进行转换或如何确定对应的数据类型吗?

标签: python arrays python-2.7


【解决方案1】:

在这样的不同类型之间转换时,似乎结构模块是最好的方法:

import struct    

bufferstr = ""
dougarray = [1196773188, 542327116]
for num in dougarray:
    bufferstr += struct.pack("i", num)

print bufferstr # Result is 'DOUGLAS'

从现在开始,我们可以使用 struct.unpack() 轻松地将 'DOUGLAS' 转换为我们想要的任何数据类型:

print struct.unpack("f", bufferstr[0:4]) # Result is (54607.265625)

然而,我们一次只能解压一定数量的字节。谢谢大家的建议!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-26
    • 1970-01-01
    • 1970-01-01
    • 2015-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多