java把字符串转化为二进制,再把二进制转换成字符串的一个小例子

前几天在csdn看到有人问类似的问题,当时没有时间帮他解决出来。最近抽空写了一个小例子,希望对他能有所帮助。

 

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;


public class Test03 {

 public static void main(String[] args) {
  String string="ab 中国";
  FileWriter fw = null;
  BufferedReader fr = null;
  try {
   fw = new FileWriter("C://a.txt");
   byte[] byts = string.getBytes();
   for(int i=0;i<byts.length;i++)
   {
    fw.write(getBit(byts[i]));
   }
   fw.close();
   fr = new BufferedReader(new FileReader("C://a.txt"));
   fw = new FileWriter("C://b.txt");
   char[] cbuf = new char[8];
   int len = -1;
   while(-1!=(len=fr.read(cbuf)))
   {
    if(cbuf[0]=='0')
    {
     byte[] bt = new byte[1];
     bt[0] = Byte.parseByte(String.valueOf(cbuf), 2);
     fw.write(new String(bt));
    }
    if(cbuf[0]=='1')
    {
     byte[] bt = new byte[2];
     bt[0] = (byte) (-((Integer.parseInt(String.valueOf(cbuf), 2)^0xFF)+1));
     if((8==(len=fr.read(cbuf)))&&cbuf[0]=='1')
      bt[1] = (byte) (-((Integer.parseInt(String.valueOf(cbuf), 2)^0xFF)+1));
     fw.write(new String(bt));
    }
    
   }
                   fr.close();
     fw.close(); 
   
  } catch (FileNotFoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch(IOException e)
  {
   e.printStackTrace();
  }
  finally{
   try {
                                fr.close();
    fw.close();
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }

 }
 public static String getBit(int b)
 {
  String result="";
  if(b>0)
  {

    result=Integer.toBinaryString(b); 
    result=("00000000".substring(result.length())).concat(result);
  }
  else if(b==0)
  {
    result="00000000";
  }
  else
  {
   result=(Integer.toBinaryString(b)).substring(24);
  }
    return result;
 }

}

注:1. 本代码中只适用于把中文字符解析为两个字节,英文字符解析为一个字节的中文编解码方式。如果使用其它的编码方式,请进行相应的变化。

      

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值