【问题标题】:Conversion from \xff to 0xff从 \xff 到 0xff 的转换
【发布时间】:2014-02-25 15:02:23
【问题描述】:

我正在从 ADC 读取二进制输入寄存器,我得到的输入是这样的: data = '\xff\xff\xff\xff' , data[0] = '\xff' 我必须将该数据转换为 2 的补码 fix8_7(LSB 的第 7 位中的固定二进制点),我正在使用这个函数来做到这一点:

def twos_comp(val, bits):
    # Compute the 2's compliment of int value val
    if( (val&(1<<(bits-1))) != 0 ):
        val = val - (1<<bits)
    return val

def fix8_7(val):
    # Take a signed int of 8 bit an pass it to fix8_7 (fixed binary point in 7th LSB)
    val = val / 128.0
    return val 

它们的使用方法是:

val1 = twos_comp(int('0xff',16),len(val))
fix8_7(val1)

但是我收到一个错误,因为我需要输入一个十六进制值,例如 0xff 或 ff no \xff,我该如何解决这个问题??

【问题讨论】:

  • ord('\xff') == 0xff... 换句话说,将您的字节字符串转换为 8 位值列表:datavalues = [ord(x) for x in datastring]
  • 或使用map(ord,datastring)itertools.imap(ord,datastring) 驱动您的处理循环。
  • 我试过 ord('\xff') 但这给了我 255,我需要那个二进制补码,所以值不正确。谢谢
  • 错误... 255 == 0xff ??? int('0xff') == 255 ??? 0xff 是十进制 255 的十六进制表示法,它们是 same 值。
  • 它的二进制补码..,0xff 8 位 -1 不是 255

标签: python binary hex binary-data


【解决方案1】:

如果您正在寻找将\xff 更改为0xff 的方法,您可以简单地使用ordhex 这样的函数

data = '\xff\xff\xff\xff'
data = map(hex, map(ord, data))
print data
# ['0xff', '0xff', '0xff', '0xff']

【讨论】:

    【解决方案2】:

    您的twos_comp(val, bits) 函数要求参数为整数。您可以直接获取整数,而无需先使用bytearray 将输入转换为'0xff' 字符串:

    >>> data = '\xff\xff\xff\xff'
    >>> b = bytearray(data)
    >>> b[0] == 0xff
    True
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-28
      • 2021-11-30
      • 2012-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-22
      相关资源
      最近更新 更多