这里为了方便还写了一个byte[]的辅助类:
public class ByteHapper {
//原始数组
byte[] bytes;
//记录当前写入到多少位
int index;
private ByteHapper(int capacity){
bytes = new byte[capacity];
index = 0;
}
public static ByteHapper CreateBytes(int capacity){
ByteHapper byteHapper = new ByteHapper(capacity);
return byteHapper;
}
//向数组中追加内容
public ByteHapper AppendNumber(long val){
byte[] arr = Number2byte(val);
AppendBytes(arr);
return this;
}
public ByteHapper AppendNumber(int val){
byte[] arr = Number2byte(val);
AppendBytes(arr);
return this;
}
public ByteHapper AppendNumber(short val){
byte[] arr = Number2byte(val);
AppendBytes(arr);
return this;
}
public ByteHapper AppendNumber(byte val){
byte[] arr = new byte[]{val};
AppendBytes(arr);
return this;
}
/**
* 获取数据的总和
* @return
*/
public int GetSum(){
int ret = 0;
for(int i = 0 ; i < bytes.length ; i ++){
ret += bytes[i];
}
return ret;
}
//追加byte数组
public ByteHapper AppendBytes(byte[] arr){
for(byte i = 0 ; i < arr.length ; i ++){
bytes[index + i] = arr[i];
}
index += arr.length;
return this;
}
/**
* 将数字转换为byte数组
*/
public static byte[] Number2byte(long val) {
byte[] arr = new byte[]{
(byte) ((val >> 56) & 0xFF),
(byte) ((val >> 48) & 0xFF),
(byte) ((val >> 40) & 0xFF),
(byte) ((val >> 32) & 0xFF),
(byte) ((val >> 24) & 0xFF),
(byte) ((val >> 16) & 0xFF),
(byte) ((val >> 8) & 0xFF),
(byte) (val & 0xFF)
};
return arr;
}
public static byte[] Number2byte(int val) {
byte[] arr = new byte[]{
(byte) ((val >> 24) & 0xFF),
(byte) ((val >> 16) & 0xFF),
(byte) ((val >> 8) & 0xFF),
(byte) (val & 0xFF)
};
return arr;
}
public static byte[] Number2byte(short val) {
byte[] arr = new byte[]{
(byte) ((val >> 8) & 0xFF),
(byte) (val & 0xFF)
};
return arr;
}
}
运行Redeem类可以看到如下输出:
可以看到正确的码都可以验证成功,我们对原来的码做稍微的修改和随便输入的乱码都会验证失败。
这里在生成兑换码时,最后一步对原byte数组进行拆分操作,是生成一个新数组,然后根据原数组计算新数组中每一位的值,这里如果是在c/c++中会方便很多,直接只用指针访问地址,然后每5位操作一下就可以,但是在java暂时只能想到这种笨方法,不知道有没有更方便的方法,如果有,还请多多指教~~
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-70092-2.html
在所不辞
二是北洋水师的军舰的设计落后
宋茜也美美的@在法家拿到五冠王的瓦片
只要不是严重疏忽和恶意