【问题标题】:Python decode unexpected behavior on hex stringPython解码十六进制字符串上的意外行为
【发布时间】:2017-06-30 01:20:29
【问题描述】:

我有一个要转换为 int 的 numpy 数组的六进制字符串。

我不想使用 for 循环,因为不建议循环遍历 numpy 数组。

所以我做了以下事情:

vector = np.fromstring( s.decode('hex'), dtype=np.uint8 )

如果例如s = 'a312's.decode('hex') 返回'\xa3\x12',这是正确的。

但是如果s = 'a320's.decode('hex') 返回'\xa3 ',乍一看似乎有点奇怪,因为我期待'\xa3\x20'

你能帮帮我吗?

【问题讨论】:

    标签: python arrays numpy decode


    【解决方案1】:

    关键是 Pyhon 中的二进制字符串表示为其 ASCII 等效项

    '\x20'等价物是一个空格,正如在ASCII table 中所见:

    Hex  Dec  ASCII
     20   32    (space)
    

    如果你在终端写'\x20',它会打印一个空格:

    >>> '\x20'
    ' '
    >>> 'a320'.decode('hex') == '\xa3\x20'
    True
    

    请注意,这只是表示的一个方面:在幕后,二进制字符串包含0010 0000 二进制值。

    【讨论】:

    • 好的,我明白了。我想也许decode不是我需要的。如何从s = 'a320' 获得'\xa3\x20'
    • @SebMa:你仔细阅读答案了吗?你得到\xa3\x20。这完全取决于字符串如何表示
    • 你说得对,今天结束了,我开始累了。 decode() 最后做了我想要的,我得到了预期的整数值:np.fromstring( '\xa3 ', dtype=np.uint8 )[1]
    • 使用 python3,s.decode('hex') 不起作用:AttributeError: 'str' object has no attribute 'decode',我怎样才能使代码在 python2 和 python3 中都工作?
    • @SebMa:在 Python-3.x 中确实没有解码。您可以为此使用bytes。除此之外,Python-2.x 和 Python-3.x 实际上是两种不同的语言。制作一个同时适用于两者的程序在理论上是可行的,但非常困难(例如,mapzip 等都有不同的行为)。
    猜你喜欢
    • 2014-12-28
    • 2012-12-01
    • 2018-08-21
    • 2020-10-23
    • 1970-01-01
    • 2011-03-18
    • 2020-11-11
    • 1970-01-01
    • 2020-01-18
    相关资源
    最近更新 更多