Byte操作(8位二进制数与长度8的0/1字符串互换)

Java字节与二进制字符串转换
本文介绍Java中如何将字节转换为8位二进制字符串及反向操作的方法。通过自定义函数实现补全二进制位数,并处理正负数的转换问题。
Java中的机器码都用补码表示,但是java中好像没有提供从补码转换到字符串的操作,当然也可以自己写,但是java里提供了现成的Byte原码与字符串之间的转换方法
 
Integer.toBinaryString(int i)     从一个int(一个前24位都为0的byte)到字符串,但是不会自动补齐,比如2直接变成"10"而不是"000000010"
 
IntegerParseInt(String s, int radix)    从一个字符串s(原码)转到 int, 底数为radix。 但是这里有个问题,如果最高位是1会导致溢出, 因为原码8位正数只能到2^7再大就是负数了,而这个函数对负数只有一种处理方式就是,把最高位的那个字符变为"-",即-2只能表示成"-0000010"(不知为何要如此处理,感觉很不方便,而且API里说的也不清楚),自己写了两个转换函数,目前看来没有问题
 
 
         /** 

        * Transfer a number which is a byte represented by a integer number to a 8 bits string. 

        * For Example 8->00001000, -3->10000101 

        * 
@param b 

        * 
@return 

        
*/
 

       
public  String getEigthBitsStringFromByte( int  b) 

              
//if this is a positive number its bits number will be less than 8 

              
//so we have to fill it to be a 8 digit binary string 

              
//b=b+100000000(2^8=256) then only get the lower 8 digit 

              b
|=256;          //mark the 9th digit as 1 to make sure the string has at least 8 digits 

              String str
=Integer.toBinaryString(b); 

              
int len=str.length(); 

              
return str.substring(len-8,len); 

       }
 

        /** 

        * Transfer a 8 bits 0/1 string to byte 

        * 
@param str 

        * 
@return 

        * 
@throws Exception  Not a available 8 digits long 0/1 sting 

        
*/
 

       
public   byte  getByteFromEigthBitsString(String str)  throws  Exception

              
if(str.length()!=8

                     
throw new Exception("It's not a 8 length string"); 

              
byte b; 

              
//check if it's a minus number 

              
if(str.substring(0,1).equals("1")) 

                     
// get lower 7 digits original code 

                     str
="0"+str.substring(1); 

                     b
=Byte.valueOf(str, 2); 

                     
//then recover the 8th digit as 1 equal to plus 1000000 

                     b
|=128

              }
 

              
else 

                     b
=Byte.valueOf(str, 2); 

              }
 

              
return b; 

       }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值