我正在尝试从文件中读取这样的十六进制值并执行一些操作。
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
我该如何解决这个问题?非常感谢你的时间和救命。
答案 0 :(得分: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
希望这有帮助!