package org.hexp.hibernateexp.util;
public class BitUtil {
public static final String[] hexchars = "0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f".split(",");
public static int ubyte2int(byte in) {
return (in > 0) ? (int) in : (int) in + 256;
}
public static byte int2ubyte(int in) {
in &= 0xff;
return (in < 128) ? (byte) in : (byte) (in - 256);
}
public static int nibble2int(byte nibble) {
int out;
switch (nibble) {
case '0':
out = 0;
break;
case '1':
out = 1;
break;
case '2':
out = 2;
break;
case '3':
out = 3;
break;
case '4':
out = 4;
break;
case '5':
out = 5;
break;
case '6':
out = 6;
break;
case '7':
out = 7;
break;
case '8':
out = 8;
break;
case '9':
out = 9;
break;
case 'a':
out = 10;
break;
case 'b':
out = 11;
break;
case 'c':
out = 12;
break;
case 'd':
out = 13;
break;
case 'e':
out = 14;
break;
case 'f':
out = 15;
break;
case 'A':
out = 10;
break;
case 'B':
out = 11;
break;
case 'C':
out = 12;
break;
case 'D':
out = 13;
break;
case 'E':
out = 14;
break;
case 'F':
out = 15;
break;
default:
out = -1;
break;
}
return out;
}
public static String byte2hex(byte ubyte) {
String out;
int num;
int lo;
int hi;
num = ubyte2int(ubyte);
lo = ubyte & 0x0f;
hi = (ubyte & 0xf0) >> 4;
out = String.format("%s%s", hexchars[hi], hexchars[lo]);
return out;
}
public static String bytes2hex(byte[] bytes) {
StringBuilder sb;
int i;
int lo;
int hi;
sb = new StringBuilder();
for (i = 0; i < bytes.length; i++) {
sb.append(byte2hex(bytes[i]));
}
return sb.toString();
}
public static byte[] bitOp(byte[] a, byte[] b, BitOp op, Integer start, Integer stop) {
byte[] out;
int i;
if (start == null || stop == null) {
start = 0;
stop = a.length;
}
out = new byte[a.length];
for (i = 0; i < a.length; i++) {
out[i] = a[i];
}
for (i = start; i < stop; i++) {
switch (op) {
case AND:
out[i] &= b[i];
break;
case OR:
out[i] |= b[i];
break;
case XOR:
out[i] ^= b[i];
break;
case INV:
out[i] ^= 0xff;
break;
default:
throw new IllegalArgumentException("Unknown bit Op");
}
}
return out;
}
public static enum BitOp {
AND, OR, XOR, INV
};
}