JavaのintとCのuint 32間の変換について

1113 ワード

最近、一つのプロジェクトをしています.Androidプログラムと単片機との通信です.必要なのはAndroidプログラムが単片機にデータをたくさん送った後、これらのデータに対してCRC検査を行い、携帯電話側が自分で検査値を計算し、単片機に送り、単片機が単片機の部分から算出した検査値と比較し、一致すれば検査を通じて、一致しないと検証に失敗します.
      
最初はJavaが持参したCRCチェッククラスでチェックし、CRCチェックツールでテストしたが、結果は一致し、自信を持って単片機と正式にテストし始めたが、結果はチェックに失敗した.サイズ端のせいかと思って送信した部分を変更したら失敗.ちょうどサービス側のc#エンジニアもこの機能をしたので、彼の検証アルゴリズムを借りて、再び自信を持ってテストして、やはり失敗しました.
 
静かに分析して、c#エンジニアは各データをuintに変換して、それから検証しました.そこで、九牛二虎の力を尽くして、各データをuint 32の整数に変換し、実現コードは以下の通り(ネットで探した)
                  
public static long bytes2int(byte[] src){
   int firstByte = 0;
   int secondByte = 0;
   int thirdByte = 0;
   int fourthByte = 0;
   int index = 0;
   long anUnsignedInt = 0;
   
   firstByte = (0x000000FF & ((int) src(index)));
   secondByte = (0x000000FF & ((int) src(index+1)));
   thirdByte = (0x000000FF & ((int) src(index+2)));
   fourthByte = (0x000000FF & ((int) src(index+3)));

   anUnsignedInt  = ((long (firstByte<<24|secondByte<<16|thirdByte<<8|fourthByte)) & 0x00000000FFFFFFFF;
    return anUnsignedInt  ;
}