注册 登录
  • 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

java版字符串和二进制数据之间的转换

JAVA相关 水墨上仙 2327次浏览 已收录 手机上查看

java版字符串和二进制数据之间的转换

package io.transformBinaryString;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.junit.Test;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
/**
 * 今天在网上看到一个程序游戏,只要目的是为了能够将文件中的01二进制数据读取到程序然后通过base64解码,再转换成程序
 * 所以,自己写了个程序:(1)将一段字符串进行base64处理,然后转换成二进制输出。(2)将一段二进制数据转换成字符串,然后base64解码到对应的字符串
 * 
 */
public class TransformBS {
/**
* @see 字符串进行base64编码后转换为二进制形式,如:(h(原字符)->a(编码后)->01100001010000010011110100111101(二进制形式))
*/
@Test
public void testS2B(){
System.out.println("=========字符串到二进制!=============");
BASE64Encoder e = new BASE64Encoder();
//编码器
String s = "hello World!";
System.out.println("尚未编码的数据:"+s);
s = e.encode(s.getBytes());
//获得base64编码后的字符串
System.out.println("编码后的数据:"+s);
System.out.print("二进制数据:");
for(char c:s.toCharArray()){
//对字符串中的字符逐个转换成二进制数据
String binaryStr = Integer.toBinaryString(c);
//单个字符转换成的二进制字符串
String format = String.format("%8s",binaryStr);
//因为上面转换成二进制后的位数不够8位所以不足的前面补空格,这里是考虑到能够从数据文件批量读取。
format =format.replace(" ","0");
//高位空格替换成0,其实编码后的数据最大范围为2的6次方,首位一定是空格,不然就要用format.startWith(" ");来判断
System.out.print(format);
//输出
}
System.out.println("\n=========字符串到二进制结束!=============");
}
/**
* @see  二进制形式转换为字符串后进行base64解码的字符串如:(01100001010000010011110100111101->a->h)
*/
@Test
public void testB2S() throws IOException{
System.out.println("=========二进制到字符串开始!=============");
StringBuffer results = new StringBuffer();
//保存尚未解码的数据结果
String binaryStr= "01100001010001110101011001110011011000100100011100111000011001110101011000110010001110010111100101100010010001110101000101101000";
//二进制数据,这里是取用上面程序的最后结果
System.out.println("二进制数据:"+binaryStr);
//这里采用正则表达式来匹配8位长度的数据,然后一个个find()
Matcher matcher = Pattern.compile("\\d{8}").matcher(binaryStr);
//定义匹配模式并,获取模式
BASE64Decoder d = new BASE64Decoder();
//解码器
while(matcher.find()){
//在binaryStr中找到了8位长度的数据,依次往后面找
int intVal = Integer.valueOf(matcher.group(),2);
//matcher.group()中存储了找到匹配模式的数据,这里以2进制的形式转换为整数
results.append((char)intVal);
//将整数转换为对应的字符,并添加到结果中
}
System.out.println("尚未解码的数据:"+results);
//输出尚未解码的数据
String s = new String(d.decodeBuffer(results.toString()));
//得到解码后的数据
System.out.println("解码后的数据:"+s);
//输出解码后的数据
System.out.println("=========二进制到字符串结束!=============");
}


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明java版字符串和二进制数据之间的转换
喜欢 (0)
[开心洋葱]
分享 (0)
关于作者:
水墨上仙
……
加载中……