Java
 Computer >> コンピューター >  >> プログラミング >> Java

Javaを使用したチェックサムの実装


以下は、Javaを使用してチェックサムを実装するためのコードです-

import java.util.*;
public class Demo{
   public static void main(String args[]){
      Scanner my_scan = new Scanner(System.in);
      System.out.println("Enter the input string ");
      String my_in = my_scan.next();
      int my_checksum = generate_checksum(my_in);
      System.out.println("The checksum that has been generated is " + Integer.toHexString(my_checksum));
      System.out.println("Enter the data that needs to be sent to the receiver ");
      my_in = my_scan.next();
      System.out.println("Enter the checksum that needs to be sent to the receiver ");
      my_checksum = Integer.parseInt((my_scan.next()), 16);
      receive(my_in, my_checksum);
      my_scan.close();
   }
   static int generate_checksum(String s){
      String my_hex_val = new String();
      int x, i, my_checksum = 0;
      for (i = 0; i < s.length() - 2; i = i + 2){
         x = (int) (s.charAt(i));
         my_hex_val = Integer.toHexString(x);
         x = (int) (s.charAt(i + 1));
         my_hex_val = my_hex_val + Integer.toHexString(x);
         System.out.println(s.charAt(i) + "" + s.charAt(i + 1) + " : " + my_hex_val);
         x = Integer.parseInt(my_hex_val, 16);
         my_checksum += x;
      }
      if (s.length() % 2 == 0){
         x = (int) (s.charAt(i));
         my_hex_val = Integer.toHexString(x);
         x = (int) (s.charAt(i + 1));
         my_hex_val = my_hex_val + Integer.toHexString(x);
         System.out.println(s.charAt(i) + "" + s.charAt(i + 1) + " : "+ my_hex_val);
         x = Integer.parseInt(my_hex_val, 16);
      } else {
         x = (int) (s.charAt(i));
         my_hex_val = "00" + Integer.toHexString(x);
         x = Integer.parseInt(my_hex_val, 16);
         System.out.println(s.charAt(i) + " : " + my_hex_val);
      }
      my_checksum += x;
      my_hex_val = Integer.toHexString(my_checksum);
      if (my_hex_val.length() > 4){
         int carry = Integer.parseInt(("" + my_hex_val.charAt(0)), 16);
         my_hex_val = my_hex_val.substring(1, 5);
         my_checksum = Integer.parseInt(my_hex_val, 16);
         my_checksum += carry;
      }
      my_checksum = generate_complement(my_checksum);
      return my_checksum;
   }
   static void receive(String s, int my_checksum){
      int gen_checksum = generate_checksum(s);
      gen_checksum = generate_complement(gen_checksum);
      int syndrome = gen_checksum + my_checksum;
      syndrome = generate_complement(syndrome);
      System.out.println("The value of syndrome is " + Integer.toHexString(syndrome));
      if (syndrome == 0){
         System.out.println("Data has been received without any errors");
      } else {
         System.out.println("An error was encountered in the received data");
      }
   }
   static int generate_complement(int my_checksum){
      my_checksum = Integer.parseInt("FFFF", 16) - my_checksum;
      return my_checksum;
   }
}

入力

sample
sample
b2c8

出力

Enter the input string
sa : 7361
mp : 6d70
le : 6c65
The checksum that has been generated is b2c8
Enter the data that needs to be sent to the receiver
Enter the checksum that needs to be sent to the receiver
sa : 7361
mp : 6d70
le : 6c65
The value of syndrome is 0
Data has been received without any errors

Demoという名前のクラスには、main関数が含まれています。ここでは、Scannerインスタンスが定義され、入力文字列が定義されています。

新しい文字列インスタンスを作成し、チェックサムを0に初期化する「generate_checksum」関数が定義されています。パラメータとしてこの関数に渡された文字列は繰り返され、16進値に変換されます。すべての文字が繰り返され、整数値に変換されます。次に、16進値に変換されます。次に、16進値が次の文字の16進値に追加されます。

文字列の長さが偶数の場合、すべての文字が繰り返され、整数値に変換されます。次に、16進値に変換されます。次に、16進値が次の文字の16進値に追加されます。それ以外の場合は、「00」と連結されます。

「receive」関数は「generate_checksum」関数を呼び出し、結果を渡します。次に、元のチェックサム値(最初は0)に追加されます。次に、16進値に変換されます。この長さが4より大きい場合、「キャリー」値が生成されます。元のチェックサムが解析され、「キャリー」値に追加されます。このスニペットが実行されると、チェックサム値に対して「generate_complement」関数が呼び出されます。 「generate_complement」関数は、「FFFF」-16からチェックサム値を減算します。


  1. Javaを使用してOpenCVで長方形を描く方法は?

    Java OpenCVライブラリのorg.opencv.imgprocパッケージには、Imgprocという名前のクラスが含まれています。長方形を描くには、 rectangle()を呼び出す必要があります このクラスのメソッド。このメソッドは、次のパラメーターを受け入れます- 長方形が描画される画像を表すMatオブジェクト。 描画される長方形の頂点を表す2つのPointオブジェクト。 長方形(BGR)の色を表すScalarオブジェクト。 長方形の太さを表す整数(デフォルト:1)。 例 import org.opencv.core.Core; import org.op

  2. Javaを使用してOpenCVで線を引く方法は?

    Java OpenCVライブラリのorg.opencv.imgprocパッケージには、Imgprocという名前のクラスが含まれています。線を引くには、 line()を呼び出す必要があります このクラスのメソッド。このメソッドは、次のパラメーターを受け入れます- 線を引く画像を表すマットオブジェクト。 線が引かれるポイントを表す2つのPointオブジェクト。 線の色を表すScalarオブジェクト。 (BGR) 線の太さを表す整数(デフォルト:1)。 例 import org.opencv.core.Core; import org.opencv.core.Mat; i