java 進制轉換 實例

import com.biiway.gmrc.protocol.util.StringUtil;
import com.biiway.gmrc.protocol.util.ToStringUtil;

/** 二進制字符串和字節數組的轉換工具類 */
public class BinaryTransformer {
/** 二進制字符串轉換爲字節數組 */
public static byte[] string2ByteArray(String inputString) {
if (StringUtil.isEmpty(inputString)) {
return new byte[0];
}
inputString = inputString.trim();
int length = inputString.length();
byte[] byteArray = new byte[length];
for (int i = 0; i < length; i++) {
char c = inputString.charAt(i);
if (c >= '0' && c <= '9') {
byteArray[i] = (byte) (c - '0');
} else if (c >= 'A' && c <= 'F') {
byteArray[i] = (byte) (c - 'A' + 10);
} else if (c >= 'a' && c <= 'f') {
/** 兼容大小寫 */
byteArray[i] = (byte) (c - 'a' + 10);
} else {
throw new IllegalArgumentException("第" + (i + 1) + "個字符'" + c
+ "'無法轉換爲字節!");
}
}
return byteArray;
}

/** 字節數組轉換爲二進制字符串 */
public static String byteArray2String(byte[] byteArray) {
if (byteArray == null) {
return null;
}
int length = byteArray.length;
char[] charArray = new char[length];
for (int i = 0; i < length; i++) {
byte b = byteArray[i];
charArray[i] = (b <= (byte) 9) ? (char) ('0' + b)
: (char) ('A' + b - 10);
}
return String.valueOf(charArray);
}

/** 整數轉換爲二進制數組(1個字節) */
public static byte[] int8ToByteArray(int int8) {
byte[] byteArray = new byte[1 * 2];
byteArray[0] = (byte) ((int8 >> 4) & 0xF);
byteArray[1] = (byte) (int8 & 0xF);
return byteArray;
}

/** 整數轉換爲二進制數組(2個字節) */
public static byte[] int16ToByteArray(int int16) {
byte[] byteArray = new byte[2 * 2];
byteArray[0] = (byte) ((int16 >> 4) & 0xF);
byteArray[1] = (byte) (int16 & 0xF);
byteArray[2] = (byte) ((int16 >> 12) & 0xF);
byteArray[3] = (byte) ((int16 >> 8) & 0xF);
return byteArray;
}

/** 整數轉換爲二進制數組(3個字節) */
public static byte[] int24ToByteArray(int int24) {
byte[] byteArray = new byte[3 * 2];
byteArray[0] = (byte) ((int24 >> 4) & 0xF);
byteArray[1] = (byte) (int24 & 0xF);
byteArray[2] = (byte) ((int24 >> 12) & 0xF);
byteArray[3] = (byte) ((int24 >> 8) & 0xF);
byteArray[4] = (byte) ((int24 >> 20) & 0xF);
byteArray[5] = (byte) ((int24 >> 16) & 0xF);
return byteArray;
}

/** 將十進制數直接轉換成十六進制數組(每位直接對應相同的十六進制數字) */
public static byte[] longToDirectByteArray(long l, int length) {
if (length < 0) {
throw new IllegalArgumentException("數組長度不能是負數!");
}
NumberDigit numberDigit = new NumberDigit(l);
byte[] byteArray = new byte[length];
for (int i = 0; i < length; i++) {
byteArray[length - 1 - i] = (byte) (numberDigit.getDigit(i));
}
return byteArray;
}

/** 二進制數組轉換爲十六進制數組 */
public static byte[] byteArray2HexArray(byte[] byteArray) {
if (byteArray == null) {
return null;
}
int byteLength = byteArray.length;
if (byteLength % 2 != 0) {
throw new IllegalArgumentException("二進制數組的長度需要是偶數!");
}
int hexLength = byteLength / 2;
byte[] hexArray = new byte[hexLength];
for (int i = 0; i < hexLength; i++) {
hexArray[i] = (byte) ((byteArray[i * 2] << 4) + byteArray[i * 2 + 1]);
}
return hexArray;
}

/** 十六進制數組轉換爲二進制數組 */
public static byte[] hexArray2ByteArray(int[] hexArray) {
if (hexArray == null) {
return null;
}
int length = hexArray.length;
byte[] byteArray = new byte[length * 2];
for (int i = 0; i < length; i++) {
byteArray[i * 2] = (byte) ((hexArray[i] >> 4) & 0xF);
byteArray[i * 2 + 1] = (byte) (hexArray[i] & 0xF);
}
return byteArray;
}

/** 十六進制數組轉換爲二進制數組 */
public static byte[] hexArray2ByteArray(byte[] hexArray) {
if (hexArray == null) {
return null;
}
int length = hexArray.length;
byte[] byteArray = new byte[length * 2];
for (int i = 0; i < length; i++) {
byteArray[i * 2] = (byte) ((hexArray[i] >> 4) & 0xF);
byteArray[i * 2 + 1] = (byte) (hexArray[i] & 0xF);
}
return byteArray;
}
/** 將整數轉換爲16位字符串 高位補0 */
public static String int2String16(int i) {
int length = 16;
char[] charArray = new char[length];
for (int index = 0; index < length; index++) {
int currentBit = (i >> (length - 1 - index)) & 0x1;
charArray[index] = (currentBit == 1) ? '1' : '0';
}
return String.valueOf(charArray);
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章