使用 Java 实现校验和
javaobject oriented programmingprogramming更新于 2025/7/5 5:00:17
以下是使用 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;
}
}
Inputs
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 的类包含主要函数。这里定义了一个 Scanner 实例和一个输入字符串。
定义了 ‘generate_checksum’ 函数,该函数创建一个新的字符串实例并将校验和初始化为 0。传递给此函数作为参数的字符串被迭代,并转换为十六进制值。每个字符都迭代并转换为整数值。然后将其转换为十六进制值。然后,将十六进制值添加到下一个字符的十六进制值。
如果字符串的长度为偶数,则每个字符都迭代并转换为整数值。然后将其转换为十六进制值。然后,将十六进制值添加到下一个字符的十六进制值。否则,它与‘00’连接在一起。
‘receive’函数调用‘generate_checksum’函数并传递结果。然后将其添加到原始校验和值(最初为 0)。然后将其转换为十六进制值。如果此长度大于 4,则生成‘进位’值。原始校验和被解析并添加到‘进位’值。执行此代码段后,将对校验和值调用‘generate_complement’函数。‘generate_complement’函数从‘FFFF’-16 中减去校验和值。
相关文章
有用资源
java 参考教程 - 该教程包含有关 java 的更多信息:https://www.cainiaomax.com/java/

