package com.e2u.bit; public class BitUtil { public static String toHex(byte b) { int value = unsigned(b); char[] chars = new char[2]; chars[0] = toHex(value >> 4); chars[1] = toHex(value & 0x0F); return new String(chars); } public static String toBin(byte b) { int value = unsigned(b); int mask = 0x80; char[] result = new char[8]; for(int i = 0; i < 8; i++) { if((value & mask) != 0) { result[i] = '1'; } else { result[i] = '0'; } mask >>= 1; } return new String(result); } public static char toHex(int x) { if(x >= 0 && x <= 9) { return (char) ('0' + x); } else if(x >= 10 && x <= 15) { return (char) ('A' + (x - 10)); } throw new IllegalArgumentException(x + " is out of bound"); } public static int unsigned(byte b) { return ((int) b) & 0xFF; } public static void showString(String str) { int lineCount = 8; for(int i = 0; i < str.length(); i += lineCount) { if(i + lineCount > str.length()) { System.out.println(str.substring(i, str.length())); break; } else { System.out.println(str.substring(i, i + lineCount)); } } } public static void showHex(byte[] bytes) { for(int i = 0; i < bytes.length; i++) { System.out.print(toHex(bytes[i]) + " "); if(i % 16 == 15) { System.out.println(); } } System.out.println(); } public static int constructInt(byte[] in, int offset) { int ret = ((int) in[offset + 3] & 0xff); ret = (ret << 8) | ((int) in[offset + 2] & 0xff); ret = (ret << 8) | ((int) in[offset + 1] & 0xff); ret = (ret << 8) | ((int) in[offset + 0] & 0xff); return (ret); } public static void toByte(byte[] out, int offset, int x) { out[offset] = (byte)(x & 0xFF); out[offset + 1] = (byte)((x >> 8) & 0xFF); out[offset + 2] = (byte)((x >> 16) & 0xFF); out[offset + 3] = (byte)((x >> 24) & 0xFF); } public static void main(String[] args) { byte[] in = {'T', 'C', 'L', 'G'}; int result = constructInt(in, 0); System.out.println(Integer.toHexString(result)); toByte(in, 0, result); for(int i = 0; i < in.length; i++) { System.out.println(toHex(in[i])); } } }