java 如何计算校验和,比如如下这段代码如何修改?
Dated=newDate();byte[]b1=newbyte[8];Datedate=newDate(System.currentTimeMillis());Cale...
Date d = new Date();
byte[] b1 = new byte[8];
Date date = new Date(System.currentTimeMillis());
Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
b1[0] = (byte) 0XF5; //Head
b1[1] = (byte)(year&0xff); //年
b1[2] = (byte) (c.get(Calendar.MONTH) + 1); //月
b1[3] = (byte) c.get(Calendar.DAY_OF_MONTH); //日
b1[4] = (byte) c.get(Calendar.HOUR_OF_DAY); //小时
b1[5] = (byte) c.get(Calendar.MINUTE); //分
b1[6] = (byte) c.get(Calendar.SECOND); //秒
b1[7] = (byte)(b1[0]^b1[1]^b1[2]^b1[3]^b1[4]^b1[5]^b1[6]); //校验符
我现在的需求是将b1[0],b1[1],b1[2],--b1[6]全部放入b1[7]里面进行校验,然后再将这些数据发送出去,请问这个如何做校验? 展开
byte[] b1 = new byte[8];
Date date = new Date(System.currentTimeMillis());
Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
b1[0] = (byte) 0XF5; //Head
b1[1] = (byte)(year&0xff); //年
b1[2] = (byte) (c.get(Calendar.MONTH) + 1); //月
b1[3] = (byte) c.get(Calendar.DAY_OF_MONTH); //日
b1[4] = (byte) c.get(Calendar.HOUR_OF_DAY); //小时
b1[5] = (byte) c.get(Calendar.MINUTE); //分
b1[6] = (byte) c.get(Calendar.SECOND); //秒
b1[7] = (byte)(b1[0]^b1[1]^b1[2]^b1[3]^b1[4]^b1[5]^b1[6]); //校验符
我现在的需求是将b1[0],b1[1],b1[2],--b1[6]全部放入b1[7]里面进行校验,然后再将这些数据发送出去,请问这个如何做校验? 展开
1个回答
展开全部
您好,1、 编写一个计算机程序用来计算一个文件的16位效验和。最快速的方法是用一个32位的整数来存放这个和。记住要处理进位(例如,超过16位的那些位),把它们加到效验和中。
要求:1)以命令行形式运行:check_sum infile
其中check_sum为程序名,infile为输入数据文件名。
2)输出:数据文件的效验和
附:效验和(checksum)
原理:把要发送的数据看成二进制整数序列,并计算他们的和。若数据字节长度为奇数,则在数据尾部补一个字节的0以凑成偶数。
例子:16位效验和计算,下图表明一个小的字符串的16位效验和的计算。
为了计算效验和,发送计算机把每对字符当成16位整数处理并计算效验和。如果效验和大于16位,那么把进位一起加到最后的效验和中。
要求:1)以命令行形式运行:check_sum infile
其中check_sum为程序名,infile为输入数据文件名。
2)输出:数据文件的效验和
附:效验和(checksum)
原理:把要发送的数据看成二进制整数序列,并计算他们的和。若数据字节长度为奇数,则在数据尾部补一个字节的0以凑成偶数。
例子:16位效验和计算,下图表明一个小的字符串的16位效验和的计算。
为了计算效验和,发送计算机把每对字符当成16位整数处理并计算效验和。如果效验和大于16位,那么把进位一起加到最后的效验和中。
追问
新手,完全不懂,能给一小段代码进行参考学习么
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |