编写一个计算机程序用来计算一个文件的 16 位效验和(Java实现)

编写一个计算机程序用来计算一个文件的 16 位效验和(Java实现)

题目

编写一个计算机程序用来计算一个文件的 16 位效验和。最快速的方法是用一个 32 位的整数来存放这个和。记住要处理进位(例如,超过 16 位的那些位),把它们加到效验和中。

原理

把要发送的数据看成 16 比特的二进制整数序列,并计算他们的和。若数据字节长度为奇数,则在数据尾部补一个字节的 0 以凑成偶数。

示例

image-20210527232835835

程序设计思路

1.使用BufferedReader读入文件,每次读一行,每次都会得到一个String类型变量;

2.将该String类型变量转化为char型数组,便于后面拼接计算;

3.数组中,每两个char使用StringBuilder来拼接成一个字符串(因为是每32位进行校验和计算),若数组长度为奇数则单独成一个数;这里是先让char数组元素转化为十进制再转化为十六进制字符串,保证了数据的准确;例:Integer.toHexString(chars[i++] & 0xFFFF)

4.每次一个字符串拼接成了16进制表示32位的字符串后,要加入list,方便后面计算;

5.计算环节:

a.累加求和,先不考虑校验和多余16位的问题;

b.将总和转化位字符串,如果长度大于4位就说明超过16位,再进行处理;

c.将后4位和其余部分的字符串都转化为十进制然后相加,再转化为十六进制,检查新字符串长度是否还大于4;d.如果还大于4,重复上述过程,直到字符串长度最终位4.

总体思路是转化位十进制计算后再转化为十六进制,整个过程主要是进制转化,利用好丰富的API能把一些问题简单化。

源代码及运行结果

代码:

package com.deserts.network;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;

/**
 * @ClassName checkSumTest
 * @Description TODO
 * @Author deserts
 * @Date 2021/5/26 23:00
 */
public class checkSumTest {
   
    public static void main(String[] args) {
   
        BufferedReader bf = null;
        try 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的万能效验字段的 Java 代码示例: ```java import java.util.regex.Pattern; public class Validator { public static boolean isValidField(String fieldValue, String fieldType) { if (fieldValue == null || fieldValue.isEmpty()) { return false; } switch (fieldType.toLowerCase()) { case "email": return isValidEmail(fieldValue); case "phone": return isValidPhoneNumber(fieldValue); case "zipcode": return isValidZipCode(fieldValue); // Add more cases for other field types as needed default: return true; // If fieldType is not recognized, assume it is valid } } private static boolean isValidEmail(String email) { // Regular expression pattern for validating email addresses String pattern = "^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4}$"; return Pattern.matches(pattern, email); } private static boolean isValidPhoneNumber(String phone) { // Regular expression pattern for validating US phone numbers String pattern = "^\\(\\d{3}\\) \\d{3}-\\d{4}$"; return Pattern.matches(pattern, phone); } private static boolean isValidZipCode(String zip) { // Regular expression pattern for validating US zip codes String pattern = "^\\d{5}(-\\d{4})?$"; return Pattern.matches(pattern, zip); } } ``` 该代码有一个 `isValidField` 方法,它接受两个参数:要验证的字符串和字段类型。该方法使用一个 `switch` 语句根据字段类型调用相应的验证方法。如果字段类型未被识别,该方法将默认为有效。如果字符串为空或为 null,则该方法将返回 false。 验证方法使用正则表达式模式来验证字符串的格式。在示例中,有三个验证方法:`isValidEmail`,`isValidPhoneNumber`和`isValidZipCode`。您可以根据需要添加更多方法。 请注意,这只是一个简单示例,您可能需要根据您的具体需求进行更改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值