2013-05-29 4 views
0

파일에서 16 진수 값을 읽고 일부 연산을 수행하려고합니다.파이썬 파일 16 진수 연산

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

저는 UT를 읽고 다음 작업을 수행하려고합니다.

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

내 코드 below-입니다

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로 파일을 읽는 생각했다 - 이것도 얻을 오류 이 문제는 아직 발생하지 않았으므로 값을 문자열로 읽는 중입니다.

, BTW이

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

가 어떻게이 문제를 해결 할 파이썬에서 작동? 시간 내 주셔서 감사합니다 & 도움.

+0

문자열을 long'long (float (ut))'으로 형변환 한 다음 bitwise 연산자 – karthikr

답변

1

업데이트 : 장기 변환에 기본 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) 

을 그리고 그 후에 당신은 당신의 코드 실행을 계속 할 수 있습니다 : 당신은 변환해야한다는 일을하기 전에 다음과 같이 stringlong 데이터 유형을 읽을

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 

희망이 도움이됩니다!

+2

을 수행하면 명시 적으로''ut = long (ut, 16)''' – oleg

+0

많은 지원을! 실제로 그것은 필연적이었고, 나는 그것을 완전히 잊었다. 답변이 수정되었습니다. 다시 한 번 감사드립니다 :) –

+1

FYI, 코드 블록이 파일을 열지 못했기 때문에 편집되었습니다. – thegrinner