【发布时间】: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