java字符串與二進制的相互轉化


public class StrBinaryTurn {  
    // 將Unicode字符串轉換成bool型數組  
    public boolean[] StrToBool(String input) {  
        boolean[] output = Binstr16ToBool(BinstrToBinstr16(StrToBinstr(input)));  
        return output;  
    }  
  
    // 將bool型數組轉換成Unicode字符串  
    public String BoolToStr(boolean[] input) {  
        String output = BinstrToStr(Binstr16ToBinstr(BoolToBinstr16(input)));  
        return output;  
    }  
  
    // 將字符串轉換成二進制字符串,以空格相隔  
    private String StrToBinstr(String str) {  
        char[] strChar = str.toCharArray();  
        String result = "";  
        for (int i = 0; i < strChar.length; i++) {  
            result += Integer.toBinaryString(strChar[i]) + " ";  
        }  
        return result;  
    }  
  
    // 將二進制字符串轉換成Unicode字符串  
    private String BinstrToStr(String binStr) {  
        String[] tempStr = StrToStrArray(binStr);  
        char[] tempChar = new char[tempStr.length];  
        for (int i = 0; i < tempStr.length; i++) {  
            tempChar[i] = BinstrToChar(tempStr[i]);  
        }  
        return String.valueOf(tempChar);  
    }  
  
    // 將二進制字符串格式化成全16位帶空格的Binstr  
    private String BinstrToBinstr16(String input) {  
        StringBuffer output = new StringBuffer();  
        String[] tempStr = StrToStrArray(input);  
        for (int i = 0; i < tempStr.length; i++) {  
            for (int j = 16 - tempStr[i].length(); j > 0; j--)  
                output.append('0');  
            output.append(tempStr[i] + " ");  
        }  
        return output.toString();  
    }  
  
    // 將全16位帶空格的Binstr轉化成去0前綴的帶空格Binstr  
    private String Binstr16ToBinstr(String input) {  
        StringBuffer output = new StringBuffer();  
        String[] tempStr = StrToStrArray(input);  
        for (int i = 0; i < tempStr.length; i++) {  
            for (int j = 0; j < 16; j++) {  
                if (tempStr[i].charAt(j) == '1') {  
                    output.append(tempStr[i].substring(j) + " ");  
                    break;  
                }  
                if (j == 15 && tempStr[i].charAt(j) == '0')  
                    output.append("0" + " ");  
            }  
        }  
        return output.toString();  
    }  
  
    // 二進制字串轉化為boolean型數組 輸入16位有空格的Binstr  
    private boolean[] Binstr16ToBool(String input) {  
        String[] tempStr = StrToStrArray(input);  
        boolean[] output = new boolean[tempStr.length * 16];  
        for (int i = 0, j = 0; i < input.length(); i++, j++)  
            if (input.charAt(i) == '1')  
                output[j] = true;  
            else if (input.charAt(i) == '0')  
                output[j] = false;  
            else  
                j--;  
        return output;  
    }  
  
    // boolean型數組轉化為二進制字串 返回帶0前綴16位有空格的Binstr  
    private String BoolToBinstr16(boolean[] input) {  
        StringBuffer output = new StringBuffer();  
        for (int i = 0; i < input.length; i++) {  
            if (input[i])  
                output.append('1');  
            else  
                output.append('0');  
            if ((i + 1) % 16 == 0)  
                output.append(' ');  
        }  
        output.append(' ');  
        return output.toString();  
    }  
  
    // 將二進制字符串轉換為char  
    private char BinstrToChar(String binStr) {  
        int[] temp = BinstrToIntArray(binStr);  
        int sum = 0;  
        for (int i = 0; i < temp.length; i++) {  
            sum += temp[temp.length - 1 - i] << i;  
        }  
        return (char) sum;  
    }  
  
    // 將初始二進制字符串轉換成字符串數組,以空格相隔  
    private String[] StrToStrArray(String str) {  
        return str.split(" ");  
    }  
  
    // 將二進制字符串轉換成int數組  
    private int[] BinstrToIntArray(String binStr) {  
        char[] temp = binStr.toCharArray();  
        int[] result = new int[temp.length];  
        for (int i = 0; i < temp.length; i++) {  
            result[i] = temp[i] - 48;  
        }  
        return result;  
    }  
  
}  

  原文地址:http://blog.csdn.net/q394895302/article/details/50604929


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM