java 奇偶校验

/**
* 奇校验
* <ul><li>就是让原有数据序列中(包括你要加上的一位)1的个数为奇数</li>
* <li>1000110(0)你必须添0这样原来有3个1已经是奇数了所以你添上0之后1的个数还是奇数个</li>
* </ul>
* @param bytes 长度为8的整数倍
* @param parity 0:奇校验,1:偶校验
* @return
* @throws Exception
*/
public static byte[] parityOfOdd(byte[] bytes, int parity) throws Exception{
if(bytes == null || bytes.length % 8 != 0){
throw new Exception("数据错误!");
}
if(!(parity == 0 || parity == 1)){
throw new Exception("参数错误!");
}
byte[] _bytes = bytes;
String s; // 字节码转二进制字符串
char[] cs ; // 二进制字符串转字符数组
int count; // 为1的总个数
boolean lastIsOne; // 最后一位是否为1
for(int i=0;i<_bytes.length;i++){
// 初始化参数
s = Integer.toBinaryString((int)_bytes[i]); // 字节码转二进制字符串
cs = s.toCharArray();// 二进制字符串转字符数组
count = 0;// 为1的总个数
lastIsOne = false;// 最后一位是否为1
for(int j=0;j<s.length();j++){
if(cs[j] == '1'){
count++;
}
if(j == (cs.length -1)){ // 判断最后一位是否为1
if(cs[j] == '1'){
lastIsOne = true;
} else {
lastIsOne = false;
}
}
}
// 偶数个1时
if(count % 2 == parity){
// 最后一位为1,变为0
if(lastIsOne){
_bytes[i] = (byte) (_bytes[i] - 0x01);
} else {
// 最后一位为0,变为1
_bytes[i] = (byte) (_bytes[i] + 0x01);
}
}
}
return _bytes;

}


算法有点别扭,将就能用了

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值