2016-08-05 3 views
0

데이터를 TCP 105 회선으로 보내려고합니다.이 CRC (Cyclic Redundancy Check) 계산을 어떻게 해결할 수 있습니까?

7F30001103 313,233 45D4 여기

, 313,233 123의 진수 표현과 45D4은 CRC 값이다

다음 헥스 명령 데이터 123 OK를 전송하는 것이다.

CRC를 계산 한 후이 45D4를 얻는 것이 문제가 있습니다. 웹에서 오랜 시간을 검색 한 후에 다른 표준에서 다른 CRC 값을 얻습니다. 그러나 그 CRC 값은 LED 디스플레이 회로에서 받아 들여지지 않습니다.

어떻게 7F30001103313233에서 45D4를 얻을 수 있는지 알고 싶습니다.

미리 감사드립니다.

+0

나는 8 바이트에 내 메소드를 사용하여'0x9A8F'를 얻는다. 8 바이트에서 CRC를 계산할 것인가 아니면 서브 디트 만 계산할 예정입니까? CRC는 동일한 알고리즘이 사용되는 경우에도 사용중인 다항식에 따라 다릅니다. CRC 반전, 그건 까다 롭습니다! –

+0

0x9A8F도 테스트했지만 성공하지는 못했습니다. CRC-16 일 수 있습니다. CRC 반전은 45D4 대신 D445가됩니다. –

답변

0

명령이 CRC-16/CMS라는 알고리즘과 일치합니다. 당신은 하나 개의 코드 워드를 준으로

$ reveng -w 16 -s 7f30001103313233d445 
width=16 poly=0x8005 init=0xffff refin=false refout=false xorout=0x0000 ch 
eck=0xaee7 name="CRC-16/CMS" 

이, 아마 올바른 알고리즘 (그리고 나는 CRC 바이트 - 스왑 된 것으로 가정했기 때문에.)

그 계산 코드를 생성하려면 이 CRC는 Mark Adler의 crcany 도구를 참조하십시오.

+0

그런 멋진 답변 Regregex에 감사드립니다. 나는 이것이 효과가 있기를 바란다. 그리고 나는 그것을 시험해 볼 것이다. –