0

我正在尝试从文件中读取这样的十六进制值并执行一些操作。

REVA: XA0 DID0, DF= Q8B8, Rev: 0.0, UT: 0xd2d32103800600 : Cbos: 18 (0x0)

我正在尝试阅读 UT 并对其进行以下操作。

x=ut  & 0xFFFFFFFF
y=(ut>>32) & 0xFFFFFF

我的代码如下 -

f=open('utinfo', 'rb')

for line in f:
    if line.startswith("REVA"):
        ut=line.split()[8] #grabs the value 0xd2d32103800600 
    x   = ut & 0xFFFFFFFF
    y   = (ut>>32) & 0xFFFFFF

我得到的错误是 -

     x  = ut & 0xFFFFFFFF
TypeError: unsupported operand type(s) for &: 'str' and 'long'

所以我将值作为字符串读取,但我认为将文件作为 rb 读取不会导致此问题,但它正在将值读取为字符串。

顺便说一句,这适用于python

>>?ut=0x2d32103800600
>>? x=ut & 0xFFFFFFFF
>>?x
0x3800600L
>>? y= ut>>32 & 0xFFFFFF
>>?y
>>?0x0L

我该如何解决?非常感谢您的时间和帮助。

4

1 回答 1

1

更新:将基数 16 添加到长转换!

您正在&对不同的数据类型执行操作。在此之前,您必须将读取转换为如下string数据long类型:

# at this moment ut data type is string
ut=line.split()[8] #grabs the value 0xd2d32103800600
# convert string to long data type, set base 16
ut = long(ut, 16)

之后,您可以继续执行您的代码:

x   = ut & 0xFFFFFFFF
y   = (ut>>32) & 0xFFFFFF

完整代码:

f=open('utinfo', 'rb')
for line in f:
    if line.startswith("REVA"):
        ut=line.split()[8] #grabs the value 0xd2d32103800600 
        ut=long(ut,16)
    x   = ut & 0xFFFFFFFF
    y   = (ut>>32) & 0xFFFFFF

希望这可以帮助!

于 2013-05-29T14:37:23.660 回答