实现String类型保存的二进制转换为byte类型


String类型的二进制转换为byte

/**
由于Ide 编码问题,可能会出现显示的值不是预期的 0x0f,0xff而是带有正负的十进制
*这是由于显示编码原因,但实际上底层还是转换为byte类型的对象,
可以使用js的new String('hex')查看
*/
String str =  "0000111111111111";
//将str转换为10进制,这里要注意,由于int类型长度限制,str中最多存放三个八位二进制数
int parseInt = Integer.parseInt(str, 2);
//新建byte数组
byte[] bytes = new byte[8];
//定义数组变化长度变量
int j = 0;
/*
计算。
每8位算一个字节计算,可以看出是两个byte字节
将二进制向右移动 8*(length-i-1)个位置,这样相当于是 00001111 & 0xff 11111111 & 0xff
& 0xff为了保证是16进制
*/
for (int i = 0; i < str.length() / 8; i++) {
      byte byte_i = (byte)((parseInt >> 8*((str.length()/8)-i-1)) & 0xff);
      //赋值
      bytes[j] = byte_i;
      j++;
}
//上面是思路,下面是实现
 /**
     * 转换算法
     * 传输过来的str为二进制8*8位
     * 需要将其按照每8位分割 分别计算
     * @param str 字符
     * @return 字节数组
     */
    private static byte[] getBytes(String str){
        // TODO 循环,每次处理8位
        int size = str.length()/8;
        //定义接收数组
        byte[] bytes = new byte[8];
        for (int i = 0; i < size; i++) {
            //每次截取8位计算
            String tmp = str.substring(8*i,8*(i+1));
            int tmpInt = Integer.parseInt(tmp,2);
            byte tmpByte = (byte)(tmpInt & 0xff);
            bytes[i] = tmpByte;
        }
        return bytes;
    }


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM