2017-01-26 9 views
0

私はCRC8の合計をチェックする方法が必要です。私はこのコードを見つけたが、それは働いていない :Calc Calcの目的のための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値がありますか?実際に必要な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のは、Unicode文字の文字列とすることができるので、コードでx

は、独自の問題があるので、characterAtIndexバイトを返さないことがあり、そしてlengthバイト数を返さないかもしれ。メッセージを一連のバイトとして取得する方法が必要です。

関連する問題