67,512
社区成员
发帖
与我相关
我的任务
分享
public class Sample {
public static void main(String[] args) {
try {
byte[] org = {5, 4, 3, 8, 6, 0, 12, 10, 10, 2, 15};
byte[] chg = eighth(org);
System.out.println(Arrays.toString(chg)); //[0, 10, 7, 5, 0, 7, 1, 1, 11, 0, 0];
byte b1 = 2, b2 = 15; //原数组的9,10位元素
long l3 = (b1 << 4) + b2;
byte[] target = restore(chg, l3); //原数组后两位没丢失的话,l3可以放到方法里求,如果丢失,看看通过有什么方法传参数
System.out.println(Arrays.toString(target));
} catch (Exception e) {
e.printStackTrace();
}
}
private static byte[] restore(byte[] src, long l3) {
byte[] result = new byte[11];
for (int i=0; i<9; i++) {
long l5 = 9L * l3 + (long)i;//423
long l6;
long l7 = ((l6 = 0x7fffffffL) - 1L) / 256L;//8388607
long l8 = (l6 << 1) + 2L;//4294967296
long l9 = 16807L;//16807
long l10 = 1L;
for(int i1 = 0; (long)i1 < l5 + 12L; i1++)
{
if((l10 = (int)(l10 *= l9)) < 0L)
l10 += l8;
l10 %= l6;
}
byte byte1;
byte1 = (byte)(int)(l10 / l7);
result[i] = (byte)((src[i] + byte1) & 0xf);
}
return result;
}
private static byte[] eighth(byte[] target){//[5, 4, 3, 8, 6, 0, 12, 10, 10, 2, 15]
byte abyte0[] = new byte[11];
long l3 = (target[9] << 4) + target[10]; //47
System.out.println(l3);
for(int i = 0; i < 9; i++)
{
long l5 = 9L * l3 + (long)i;//423
long l6;
long l7 = ((l6 = 0x7fffffffL) - 1L) / 256L;//8388607
long l8 = (l6 << 1) + 2L;//4294967296
long l9 = 16807L;//16807
long l10 = 1L;
for(int i1 = 0; (long)i1 < l5 + 12L; i1++)
{
if((l10 = (int)(l10 *= l9)) < 0L)
l10 += l8;
l10 %= l6;
}
byte byte1;
byte1 = (byte)(int)(l10 / l7);
abyte0[i] = (byte)((target[i] - byte1) & 0xf);//[0, 10, 7, 5, 0, 7, 1, 1, 11, 0, 0];
}
//abyte0[9] = target[9]; //保留后两位的话
//abyte0[10] = target[10];//还有可能还原
return abyte0;
}
}