/**
* 漢字字符串轉換成十六進制byte數組,一個漢字存到兩個byte里面,大整數存到兩個byte里面
* @author zhengdunzhuang
*
*/
public class ChineseCharacterStringToByteArray {
public static void main(String[] args) {
byte[] data = new byte[42];
data[0] = ( byte) 0x04;
data[1] = ( byte) (42);
printHexString(data);
System.out.println("");
String msg = "你已成功添加李先生為好友";
data = toHexByteByStrings(data,3,msg);
printHexString(data);
/*
* 用工具轉換需要的結果:
你已成功添加李先生為好友
{0x4f60,0x5df2,0x6210,0x529f,0x6dfb,0x52a0,0x674e,0x5148,0x751f,0x4e3a,0x597d,0x5 3cb,0x0};
打印輸出結果:
042A00000000000000000000000000000000000000000000000000000000000000000000000000000000
042A4F605DF26210529F6DFB52A0674E5148751F4E3A597D53CB00000000000000000000000000000000
4F60
*/
int i = 20320; // 0x4f60
byte[] b = intToByteArray(i);
System.out.println("");
printHexString(b);
}
// 整數轉換成byte數組
public static byte[] intToByteArray( int i) {
byte[] result = new byte[2];
result[0] = ( byte) ((i & 0xFF00) >> 8 );
result[1] = ( byte) ( i & 0xFF);
return result;
}
/**
* 轉化漢字字符串為十六進制編碼並放到byte數組里面,一個字符兩個byte字節
* @param data byte數組
* @param start 要追加的開始個數,從1算起,如從byte[3]開始 則start=4
* @param s 要轉換的字符串
* @return
*/
public
static
byte[] toHexByteByStrings(
byte[] data,
int start,String s) {
int j = start;
for ( int i = 0; i < s.length(); i++) {
int ch = ( int) s.charAt(i);
data[j-1] = ( byte) ((ch & 0xFF00) >> 8 );
data[j] = ( byte) ( ch & 0xFF);
j += 2;
}
return data;
}
// 轉化字符串為十六進制編碼字符串
public static String toHexByStrings(String s) {
String str = "";
for ( int i = 0; i < s.length(); i++) {
int ch = ( int) s.charAt(i);
String s4 = Integer.toHexString(ch);
str = str + s4;
}
return str; // 0x表示十六進制
}
// 打印十六進制字符串
public static void printHexString( byte[] b) {
for ( int i = 0; i < b.length; i++) {
String hex = Integer.toHexString(b[i] & 0xFF);
if (hex.length() == 1) {
hex = '0' + hex;
}
System.out.print(hex.toUpperCase());
}
}
}