XOR을 사용하여 16 진수 직렬 문자열에 대한 체크섬을 계산해야합니다. 내 (제한적) 지식을 위해서는 비트 연산자 ^를 사용하여 수행해야합니다. 또한 데이터는 이진 정수 형식으로 변환되어야합니다. 아래는 나의 초보적인 코드입니다. 그러나 계산 된 체크섬은 1000831입니다. 그것은 01001110 또는 47hex 여야합니다. 나는 오류가 선행 0이 누락 된 것일 수 있다고 생각합니다. 앞에 오는 0을 추가하려고 시도한 모든 형식화는 이진 정수를 문자열로 되돌립니다. 나는 어떤 제안을 주셔서 감사합니다.선행 0을 이진 정수 (파이썬)로 유지하는 방법은 무엇입니까?
word = ('010900004f')
#divide word into 5 separate bytes
wd1 = word[0:2]
wd2 = word[2:4]
wd3 = word[4:6]
wd4 = word[6:8]
wd5 = word[8:10]
#this converts a hex string to a binary string
wd1bs = bin(int(wd1, 16))[2:]
wd2bs = bin(int(wd2, 16))[2:]
wd3bs = bin(int(wd3, 16))[2:]
wd4bs = bin(int(wd4, 16))[2:]
#this converts binary string to binary integer
wd1i = int(wd1bs)
wd2i = int(wd2bs)
wd3i = int(wd3bs)
wd4i = int(wd4bs)
wd5i = int(wd5bs)
#now that I have binary integers, I can use the XOR bitwise operator to cal cksum
checksum = (wd1i^wd2i^wd3i^wd4i^wd5i)
#I should get 47 hex as the checksum
print (checksum, type(checksum))
[이 질문 참조] (http://stackoverflow.com/questions/16926130/python-convert-to-binary-and-keep-leading-zeros) – PyNEwbie
0x47! = 0b1001110. 아주 적은 수의 홀수는 이진 표현에서 '0'으로 끝납니다. – Hyperboreus
@PyNEwbie 사실입니다. 그러나 여기서 우리는 XY 문제의 우수성에 직면하고 있습니다. – Hyperboreus