16进制显示字节流技巧分享

 更新时间:2014年02月28日 15:33:33   投稿:zxhpj  
这篇文章主要介绍了16进制显示字节流的技巧分享,需要的朋友可以参考下

用UE的人都会觉得16进制显示文件灰常方便。为啥捏?当你要对文件加密、转码、编码的时候,蹦出一堆01二进制看着都会头大。毕竟十六进制显示文件简短方便。至少中考高考时涂过卡吧,1+2+4+8能算明白是吧。当然,那些中考和高考都能把1248码都涂错的童鞋们,一看就知道它们果断与程序猿这个“神剩”的职业无缘哈……

因为之前试着参加过科普创新大赛,当时做的咚咚是把文件以字节流读入,并转化成二进制、四进制、十六进制字符串,然后刷的一下子输出到控制台。再根据每个位的值,分别以2色、4色、16色的矩阵显示。写这个的目的是为了用摄像头识别,然后再还原成字节流写到文件里。这个程序设计是两个事实杂交出的产物——1.要求不通过任何介质和USB设备传输文件;2.zxing和QRCode有时会找不到二维码(QRCode更容易出错)。大家可以试试这个题目,用摄像头或者扬声器发送接收文件,看谁传得快,题目确实蛮有意思的呢。

当然,最重要的部分是进制转化了,读入文件的字节流byte 8位,用两个16进制显示。因为可能会遇到byte转int后为补码的情况,所以最好先统一成正数,方法其实很简单啦,一个与运算就搞定!

复制代码 代码如下:

int result = bytes&0xff;

别小看这个语句,其实这个语句很有意思的。仔细想想,为神马加了个0xff就变成正数呢?0xff每个位都是1,那与运算不就等于没变化么?哼哼,之前还真有人这么问过我,如果真有这样的问题,那就是java基础不牢固了。byte的范围是-128~127,不是0~255,所以嘛,像byte b= -42;这样的赋值肯定不能用byte b= 214;来替代了。

弄出这个,转成N进制字符串就不是啥难事了。仔细想想,是不是有个熟悉而又陌生的类直接就带这个功能呢?没错,就是用Integer来实现!但是先别急,用它之前,还得对这个int搞点小动作。

复制代码 代码如下:

( bytes & 0xff ) + 0x100

知道这是为什么?这个就是+256啊,只是为了看得直观些,就是前面加上一位。因为你得到的int转成String的话很可能只有一个位,也就是byte转16进制时丢了一位,那整个程序岂不就全错位了?安全起见,还是先统一成三位吧。

你可以试试这个看看所有byte变16进制后的输出

复制代码 代码如下:

public static void main(String[] args) {
for (int i = -128; i < 128; i++) {
byte b=(byte)i;
System.out.println( Integer.toString( ( b & 0xff ), 16));
}
}

看到这里,你会不会想:你怎么这么笨呢?for循环里的int为什么不改成byte,不就省了一行代码了么,多大的便宜啊!可以呀,你试试呗,反正我是不会去试的……

所以,最后把byte转化成二位16进制的代码是

复制代码 代码如下:

Integer.toString( ( bytes & 0xff ) + 0x100, 16).substring( 1 );

对于2进制,4进制,8进制,都是一个道理,我就不举例了。一句代码就实现了,很神奇吧……

接下来就是用矩阵晶格一帧帧显示文件,用摄像头拍下识别颜色,再转换会字符串,并反馈个颜色让对方知道识别完了好换下一张图……如此循环,直到矩阵晶格显示文件已经结束。这部分代码我就不贴出来了,整个过程可以靠丰富的想象力YY出来吧……

然后是字符串转回字节流,这就是简单活了

复制代码 代码如下:

(byte)Integer.parseInt(string, 16)

连位运算都不用,直接就出结果,把它们放到字节数组里,用FileOutputStream的write反复的写就可以了!别忘了关闭输入输出流哈

相关文章

  • Java实现双向链表(两个版本)

    Java实现双向链表(两个版本)

    这篇文章主要介绍了Java实现双向链表(两个版本)的相关资料,需要的朋友可以参考下
    2016-02-02
  • 基于maven install 没反应的解决方法

    基于maven install 没反应的解决方法

    下面小编就为大家带来一篇基于maven install 没反应的解决方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • Java中Comparable与Comparator的区别解析

    Java中Comparable与Comparator的区别解析

    这篇文章主要介绍了Java中Comparable与Comparator的区别解析,实现Comparable接口,重写compareTo方法,一般在实体类定义的时候就可以选择实现该接口,提供一个默认的排序方式,供Arrays.sort和Collections.sort使用,需要的朋友可以参考下
    2024-01-01
  • Spring Boot中使用Spring-data-jpa实现数据库增删查改

    Spring Boot中使用Spring-data-jpa实现数据库增删查改

    本篇文章主要介绍了Spring Boot中使用Spring-data-jpa实现增删查改,非常具有实用价值,需要的朋友可以参考下。
    2017-03-03
  • SpringBoot数据层处理方案精讲

    SpringBoot数据层处理方案精讲

    这篇文章主要介绍了SpringBoot数据层技术的解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-10-10
  • java中HashSet的特点及实例用法

    java中HashSet的特点及实例用法

    在本篇文章里小编给大家整理的是一篇关于java中HashSet的特点及实例用法,有兴趣的朋友们可以学习下。
    2021-04-04
  • SpringBoot中使用configtree读取树形文件目录中的配置详解

    SpringBoot中使用configtree读取树形文件目录中的配置详解

    这篇文章主要介绍了SpringBoot中使用configtree读取树形文件目录中的配置详解,configtree通过spring.config.import + configtree:前缀的方式,加载以文件名为key、文件内容为value的配置属性,需要的朋友可以参考下
    2023-12-12
  • Java实现多个数组间的排列组合

    Java实现多个数组间的排列组合

    这篇文章主要为大家详细介绍了Java实现多个数组间的排列组合,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • Java实现字符串和输入流的相互转换

    Java实现字符串和输入流的相互转换

    这篇文章主要介绍了Java实现字符串和输入流的相互转换方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • Java SpringMVC异步处理详解

    Java SpringMVC异步处理详解

    这篇文章主要介绍了Java springmvc的处理异步,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2021-10-10

最新评论