Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python文件十六进制操作_Python - Fatal编程技术网

Python文件十六进制操作

Python文件十六进制操作,python,Python,我试图从一个文件中读取这样的十六进制值,并执行一些操作 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: 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

我该如何解决这个问题?非常感谢您的时间和帮助

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

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

# 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
完整代码:
希望这有帮助

您可以将字符串强制转换为long
long(float(ut))
,然后执行位运算符。我们是否可以显式地设置base
ut=long(ut,16)
非常感谢您的支持!确实有必要,我完全忘记了这一点。修正了答案。再次感谢:)是的,我注意到了。感谢您的支持:)
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