2017-01-26 7 views
0

합계 CRC8을 확인하는 방법이 필요합니다. 이 코드를 찾았지만, 제대로 동작하지 않습니다 :Calc 목표 CRC에 대한 CRC8

- (int)crc8Checksum:(NSString*)dataFrame{ 

    char j; 
    int crc8 = 0; 
    int x = 0; 

    for (int i = 0; i < [dataFrame length]; i++){ 
     x = [dataFrame characterAtIndex:i]; 

     for (int k = 0; k < 8; k++){ 
      j = 1 & (x^crc8); 
      crc8 = floor0(crc8/2) & 0xFF; 
      x = floor0(x/2) & 0xFF; 
      if (j != 0){ 
       crc8 = crc8^0x8C; 
      } 
     } 
    } 
    return crc8; 
} 

는 제발 도와주세요!

+0

문맥을 좀 더 제공 할 수 있습니까? 또한 오류가 있습니까? 또는 출력 결과가 예상 한 것과 다릅니다. –

+0

Xcode는 "floor0"이 오래된 C 방법이라고 말합니다. –

+0

이것은 crc의 다소 이상한 구현입니다 (NSString을 사용하고 잘못 작동하는 많은 방법을 소개하는 문자에서 작동합니다). 이것을 시도해보십시오 : https://github.com/cconway/RFduinoUBP/blob/master/iOS/UBP-Demo/UBP-Demo/NSData%2BCRC8.m –

답변

0

"작동하지 않는다"는 것을 의미합니까? this catalog에는 14 가지 CRC-8 정의가 있으며, 아마도 야생에서 더 많은 CRC-8 정의가있을 것입니다. 비교할 CRC 값이 있습니까? 실제로 필요한 CRC에 대한 문서가 있습니까? 테스트 메시지와 이에 상응하는 예상 CRC는 무엇입니까?

임의의 CRC-8 코드를 선택하여 필요한 것을 수행 할 수는 없습니다.

해당 코드는 연결된 카탈로그에서 CRC-8/MAXIM을 계산합니다. 그러나 그것은 정말로 끔찍한 코드입니다. 불필요한 나누기와 바닥. 여기에 더 빠르고 간편하게 내부 루프는 다음과 같습니다

crc8 ^= x; 
    for (int k = 0; k < 8; k++) 
     crc8 = crc8 & 1 ? (crc8 >> 1)^0x8c : crc8 >> 1; 

당신은 CRC 한 번에 바이트 또는 한 번에 기계 단어를 계산 테이블과 알고리즘과 빠른 여전히를 얻을 수 있습니다. 있는 NSString 유니 코드 문자의 문자열이 될 수 있기 때문에 코드의 x

, 그 자신의 문제를 가지고, 그래서 characterAtIndex는 바이트를 반환하지 않을 수 있으며, length는 바이트 수를 반환하지 않을 수 있습니다. 메시지를 일련의 바이트로 가져 오는 방법이 필요합니다.