새로운 큰 프로젝트를 시작하기 때문에 CRC (Cyclic Redundancy Check)에 대해 배우기 시작했습니다. 나는 그것에 대해 배웠다. (CRC-16, 다항식 x^16 + x^15 + x^2 + 1, 16 진수 0x8005와 같음). 그러나 내가 잘했는지 확인했을 때, 그것을 찾았지만 대답을 얻지 못했습니다. 웹 사이트를 사용하고 있습니다 : http://crccalc.com/ 코드에서 이진 값 0100010101010011 (0x4553과 동일)을 입력하고 결과는 1001111111101100 (0x9FEC와 동일합니다)입니다. 웹 사이트에서 올바른 결과를 찾았지만 그렇지 않습니다. 내가 기대했던 것 (나는 0xAD72을 얻을 것이라고 생각했다).파이썬에서 CRC-16을 계산하려고 시도했습니다.
나는 두 가지 질문이 있습니다
내가 CRC-16/ARC하지 CRC-16/BUYPASS을 지원하는 코드를 변경하려면 어떻게합니까?
왜 다항식 x^16 + x^15 + x^2 + 1이 0x8005가 아니라 0xC005가 아닌지? 감사합니다.
내 파이썬 코드 :
def stXor(a,b):
if(a==b):
return "0"
else:
return "1"
def stshl(str1,shift):
temp=""
temp=str1
for i in range(shift):
temp=temp[1:]
return temp
def get_error(data,padding=True):
good=data
lst=["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"]
if(padding):
good=data+"0"*16
now="0"
while len(good)>0:
now=lst[0]
lst[0]= stXor(lst[1],now) #x^15
lst[1]=lst[2]
lst[2]=lst[3]
lst[3]=lst[4]
lst[4]=lst[5]
lst[5]=lst[6]
lst[6]=lst[7]
lst[7]=lst[8]
lst[8]=lst[9]
lst[9]=lst[10]
lst[10]=lst[11]
lst[11]=lst[12]
lst[12]=lst[13]
lst[13]=stXor(lst[14],now)# x^2
lst[14]=lst[15]
lst[15]=stXor(good[0],now)
good=stshl(good,1)
a=""
for letter in lst:
a+=letter
return a
data="0100010101010011"
print("data entered: "+"\nhex: "+str(hex(int(data, 2)))+"\nBinary: "+data)
a=get_error(data)
print("Result: "+"\nhex: "+str(hex(int(a, 2)))+"\nBinary: "+a)
인쇄 출력 :
데이터 입력 :
진수 : 0x4553
진 : 0100010101010011
결과 :
진수 : 0x9fec
진 : 1001111111101100
'0xC003'은 어디에서 왔습니까? –
죄송합니다. 나는 그것을 0xC005로 고쳤다 –
좋아, 그럼'0xC005'는 어디에서 왔는가? –