2011年4月21日 星期四

小心得 16位元字串轉2位元字串

因為有需求所以查了一下 code 改寫出了一個function 來達成這個功能,不過載本機上可以執行,帶放在 google app engine 上 就會出現 "java.lang.NumberFormatException" 的錯誤,
估計是toBinaryString 或 parseInt 出錯


輸入像 '12AF' 的字串

就會轉出像 '0001001010101111' 的字串


CODE:

public static String GetHexString(String _str){
String _string = "";

char[] _c = _str.toCharArray();

for(int i=0; i < _c.length ; i++){
String _tempString = Integer.toBinaryString(
Integer.parseInt(String.valueOf(_c[i]), 16));

/// 0
for(int j=_tempString.length();j< 4 ;j++){
_tempString = "0"+_tempString;
}

_string += _tempString;
}

return _string;
}




之後只好改成另一種簡單的寫法



public static String GetHEXFormatString(String _str){

String _string = "";


for(int i =0 ; i <_str.length() ; i++ ){
String _tempStr = "";

char x = _str.charAt(i);

switch (x){
case '0':
_tempStr ="0000";
break;
case '1':
_tempStr ="0001";
break;
case '2':
_tempStr ="0010";
break;
case '3':
_tempStr ="0011";
break;
case '4':
_tempStr ="0100";
break;
case '5':
_tempStr ="0101";
break;
case '6':
_tempStr ="0110";
break;
case '7':
_tempStr ="0111";
break;
case '8':
_tempStr ="1000";
break;
case '9':
_tempStr ="1001";
break;
case 'A':
_tempStr ="1010";
break;
case 'B':
_tempStr ="1011";
break;
case 'C':
_tempStr ="1100";
break;
case 'D':
_tempStr ="1101";
break;
case 'E':
_tempStr ="1110";
break;
case 'F':
_tempStr ="1111";
break;
default:
_tempStr ="0000";
}

_string += _tempStr;
}

return _string;
}

沒有留言: