二进制和字符串之间的转换(包含一些小知识点运用)
来源:互联网 发布:php初学者基础知识 编辑:程序博客网 时间:2024/06/12 01:35
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;/** * 今天在网上看到一个程序游戏,主要目的是为了能够将文件中的字符串读取到程序,然后通过base64解码,再转换成二进制输出 * 所以,自己写了个程序:(1)将一段字符串进行base64处理,然后转换成二进制输出。(2)将一段二进制数据转换成字符串,然后base64解码到对应的字符串 * */public class TransformBS {/*** @see 字符串进行base64编码后转换为二进制形式,如:(h(原字符)->a(编码后)->01100001010000010011110100111101(二进制形式))*/@Testpublic 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)*/@Testpublic 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中二进制和字符串之间的相互转换
- 二进制与字符串之间的转换
- 二进制数据与字符串之间的转换
- C# 图片和二进制之间的转换
- C# 图片和二进制之间的转换
- C# 图片和二进制之间的转换
- c#图片和二进制之间的转换
- 二进制和十进制之间的相互转换
- 自然二进制和格雷码之间的转换
- java_day02_二进制和十进制之间的转换
- 二进制和十进制之间的转换
- 二进制和十进制之间的转换
- 字符串和(Unicode)十六进制数之间的转换方法包含(C#和VB6)
- 字符串和(Unicode)十六进制数之间的转换方法包含(C#和VB6)
- IOS中常用的字符串、十进制、二进制、十六进制之间互相转换及简单算术和
- 日期的工具类,包含了字符串和日期之间转换的方法
- 字符串和二进制数组转换、将HTML文件显示为页面的一部分、UTF8和GB2312之间的转换
- 2011年十大网络黑客技术
- mysql 各个字段的 详细解说
- JDBC批量更新。
- eclipse/myeclipse注释模板的修改
- android menu 控件
- 二进制和字符串之间的转换(包含一些小知识点运用)
- Android UI图片制作相关
- 产品经理工作介绍
- 韩顺平_php从入门到精通_视频教程_第9讲_多标签汇总②_线包字效果_测试题_学习笔记_源代码图解_PPT文档整理
- windows 8 开始菜单找回与Metro菜单修改方法
- Drupal7 当中如何将book导出为pdf/word
- Git服务器搭建
- linux 实现极速开机(开机时间5S)
- Q: When I try to animate the frame of a CALayer nothing happens. Why?