一起遨游网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 622|回复: 0

[Java] java 异或运算操作16位进制

[复制链接]

4

精华

0

钻石

4万

金币

管理员

Rank: 24Rank: 24Rank: 24Rank: 24Rank: 24Rank: 24

积分
46449

官方

发表于 2019-12-16 15:51:28 | 显示全部楼层 |阅读模式

分享 异或方法代码如下:

  1. package cc.javar.util;
  2. /***
  3. *  异或效验
  4. *  @author chenji
  5. ***/
  6. public class ByteCheck {
  7.     public static runXor(String[] args) {
  8.         String zhi16="5A A5 10 10 11 00 66 66 10 10 10 00 10 19 01 00 04 03 02 00 96 65 68 6C 00 5A A5 10 10 11 00 66 66 10 10 10 00 10 19 01 00 04 03 02 00 96 65 68";
  9.         String code = checkcode(zhi16.trim);
  10.         System.out.println("code:" + code);
  11.     }
  12.     public static String checkcode(String para) {
  13.         int length = para.length() / 2;
  14.         String[] dateArr = new String[length];
  15.         for (int i = 0; i < length; i++) {
  16.             dateArr[i] = para.substring(i * 2, i * 2 + 2);
  17.         }
  18.         String code = "00";
  19.         for (int i = 0; i < dateArr.length; i++) {
  20.             code = xor(code, dateArr[i]);
  21.         }
  22.         if(code.length()<2){
  23.             code = "0"+code;
  24.         }
  25.         return code;
  26.     }
  27.     private static String xor(String strHex_X, String strHex_Y) {
  28.         // 将x、y转成二进制形式
  29.         String anotherBinary = Integer.toBinaryString(Integer.valueOf(strHex_X,
  30.                 16));
  31.         String thisBinary = Integer.toBinaryString(Integer
  32.                 .valueOf(strHex_Y, 16));
  33.         String result = "";
  34.         // 判断是否为8位二进制,否则左补零
  35.         if (anotherBinary.length() != 8) {
  36.             for (int i = anotherBinary.length(); i < 8; i++) {
  37.                 anotherBinary = "0" + anotherBinary;
  38.             }
  39.         }
  40.         if (thisBinary.length() != 8) {
  41.             for (int i = thisBinary.length(); i < 8; i++) {
  42.                 thisBinary = "0" + thisBinary;
  43.             }
  44.         }
  45.         // 异或运算
  46.         for (int i = 0; i < anotherBinary.length(); i++) {
  47.             // 如果相同位置数相同,则补0,否则补1
  48.             if (thisBinary.charAt(i) == anotherBinary.charAt(i))
  49.                 result += "0";
  50.             else {
  51.                 result += "1";
  52.             }
  53.         }
  54.         System.out.println(result);
  55.         return Integer.toHexString(Integer.parseInt(result, 2));
  56.     }
  57. }
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|一起遨游网 ( 苏ICP备15025881号-1 )

GMT+8, 2020-10-20 13:32 , Processed in 0.110504 second(s), 8 queries , File On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表