아래의 Python 3 코드는 16 진수 표기로 bytes
쌍의 개체를 만들고 두 개의 bytes
문자열이 다른 위치의 오프셋을 찾습니다.
# The input data in hex form, so it can be easily embedded in the script
s0 = 'ffff fff8 ff82 f825 825e 25ef 5eff efff ffff fff8 ff82 f826 8260 260f 60ff 0fff ffff 35ff 5fff fff7'
s1 = 'ffff fff1 ff82 f845 825e 25ef 500f efff 1ff1 fff8 ff82 f823 8260 260f 60ff 05f3 ffff 35ff 5ffe fff7'
print(s0)
print(s1)
# Convert the data to bytes, so it's in the same form it would
# be in if we'd read it from files opened in binary mode
b0 = bytes.fromhex(s0)
b1 = bytes.fromhex(s1)
print(b0.hex())
print(b1.hex())
# Create a list of the offsets where the two bytes objects differ
diff = [i for i, (u,v) in enumerate(zip(b0, b1)) if u != v]
print(diff)
# Print the bytes that differ, along with their offsets, all in hex
for i in diff:
print('{:04x}: {:02x} {:02x}'.format(i, b0[i], b1[i]))
출력
ffff fff8 ff82 f825 825e 25ef 5eff efff ffff fff8 ff82 f826 8260 260f 60ff 0fff ffff 35ff 5fff fff7
ffff fff1 ff82 f845 825e 25ef 500f efff 1ff1 fff8 ff82 f823 8260 260f 60ff 05f3 ffff 35ff 5ffe fff7
fffffff8ff82f825825e25ef5effeffffffffff8ff82f8268260260f60ff0fffffff35ff5ffffff7
fffffff1ff82f845825e25ef500fefff1ff1fff8ff82f8238260260f60ff05f3ffff35ff5ffefff7
[3, 7, 12, 13, 16, 17, 23, 30, 31, 37]
0003: f8 f1
0007: 25 45
000c: 5e 50
000d: ff 0f
0010: ff 1f
0011: ff f1
0017: 26 23
001e: 0f 05
001f: ff f3
0025: ff fe
'binascii.hexlify (file1.read)'잘못이다, 난 당신 말은 가정'binascii.hexlify (file1.read())'. 'file1contents = []'는 빈리스트를'file1contents' 이름에 할당합니다. 파일 바이트를 16 진수로 변환하는 이유는 무엇입니까? 바이트로 직접 작업하지 않는 이유는 무엇입니까? 어떤 종류의 비교를하고 있습니까? 파일이 일치하지 않는 오프셋을 찾고 싶습니까, 아니면 좀 더 복잡한 것을 원합니까? –
네 말이 맞습니다. 초기 파일은 .bin이므로 변환해야합니다. 문자열에서 바이트를 읽으면 ASCII 값으로 변환됩니다. 지금은 binascii에서 읽은 두 문자열을 비교하여 2의 차이 수를 계산할 수 있습니다.하지만 원하는 것은 주소 (예 : 1AB3C)에 차이가 있음을 나타낼 수 있어야한다는 것입니다. 그래서 이상적으로 file1과 file1의 배열의 차이점의 주소를 포함하는 1 개의 배열과 file2의 주소로 끝나기를 원합니다. 그런 다음 해당 값을 빼서 주어진 시간에 오프셋을 찾을 수 있습니다. – TatsuyaMiura
죄송합니다, 당신은 나를 잃어 버렸습니다. 16 진수로 변환 된 2 개의 작은 데이터 파일의 예제를 게시 할 수 있습니까? –