java byte[] 学习总结-程序员宅基地

技术标签: byte[]  Java  byte  byte[]笔记  

最近在学习netty,突然发现自己对字符数组是那么的陌生(吓死宝宝了)。然后各种学习,然后测试,终于会用一些了。下线的都是本人的学习笔记。

byte表是字符,一个字节,8位,可以组成2^8=256中不同数字。byte存值范围: -128 - 127;

 -128 -> -1 在十六进制表示范围: 0x80 -> 0xff ,在二进制表示范围:10000000 -> 11111111

 0 -> 127   在十六进制表示范围: 0x00 -> 0x7f , 在二进制表示范围是:00000000 -> 01111111

byte中可以存:一个ascii字符(ascii范围:0-127)、十进制数值(-128-127)、十六进制数值(0x00 - 0x79,十进值范围:0-127)

如果存不是-128-127范围的十进值数值的话,需要声明此十进值数值是byte类型:byte b = (byte)128;//其实128在byte中存的值是-128(因为byte范围是-128-127,如果超出范围还是要从-128开始)

如果存的不是0x00 - 0x79(十进值:0-127)范围的十六进制数值的话,即范围在0x80 - 0xff(十进值:128-255) 时需要声明此十六进制为byte类型:byte b = (byte) 0x80; //其实此时byte存的值是128,因为超过-128-127范围,所以需要声明。其实这个原因与负数取的是反码导致的.........(可以自己研究。 -128  , 0x80 , 128这三个值相等)

byte就说到这里,下面说说byte[]的转换吧.

import java.util.Arrays;

/**
 * Created by XiChuan on 2018-11-07.
 */
public class TestMain {
    private static final char[] HEX_CHAR = {'0', '1', '2', '3', '4', '5',
            '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};


    public static void main(String[] args){
        byte[] b = new byte[]{'d',(byte)0xff,-1,(byte)255,(byte)0x80,(byte) 128,-128};

        //将byte[]数组用字符串表示
        System.out.println( Arrays.toString(b));  //这个是byte[]中实际存的值
        
        //打印出byte[]的十六进制字符串
        System.out.println(bytesToHexString(b)); //这个存的是实际的每个字节的二级制表现形式

        //打印出byte[]的ascii的字符串
        System.out.println(new String(b));  //ascii范围是如果不是0-127的字段,会转为乱码

        

    }



    /**
     * 将字节数字转换为16进制字符串
     * @param bytes
     * @return
     */
    private static String bytesToHexString(byte[] bytes) {
        char[] buf = new char[bytes.length * 2];
        int index = 0;
        for(byte b : bytes) { // 利用位运算进行转换,可以看作方法一的变种
            buf[index++] = HEX_CHAR[b >>> 4 & 0xf];
            buf[index++] = HEX_CHAR[b & 0xf];
        }

        return new String(buf);
    }

    /**
     * 将十六进制字符串转换字节数组
     * @param str
     * @return
     */
    private static byte[] hexStringToBytes(String str) {
        if(str == null || str.trim().equals("")) {
            return new byte[0];
        }

        byte[] bytes = new byte[str.length() / 2];
        for(int i = 0; i < str.length() / 2; i++) {
            String subStr = str.substring(i * 2, i * 2 + 2);
            bytes[i] = (byte) Integer.parseInt(subStr, 16);
        }

        return bytes;
    }

}

打印结果:

[100, -1, -1, -1, -128, -128, -128]
64ffffff808080
d������

 github上有我更多的笔记:Raray-chuan (兮川) · GitHub,欢迎stars与following,如果有问题可以在issue中向我咨询

关注我的公众号,获取更多关于后端、大数据的知识

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zc_ad/article/details/83825688

智能推荐

计算机键盘指示灯不亮也不启动不了机,电脑开不开机,显示器无反应,键盘指示灯不亮,主...-程序员宅基地

文章浏览阅读5.1k次。公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解。话题:电脑开不开机,显示器无反应,键盘指示灯不亮,主机指示灯亮一会就回答:首先电脑的外部接线是否接好,把各个连线重新一遍,看故障是否排除。也可能是硬件有的地方接触 或者 有些看看你的CPU风扇是否转的正常建议拔一下显卡、内存,清理一下卫生,并且擦亮显卡、内存的金手指。将BIOS电池放电,也就是主板的圆形钮扣电池拿下来5分钟(恢复BIOS出..._电脑不开机键盘灯不亮

OpenCV学习笔记(七)——窗口交互操作(图像窗口滑动条、鼠标响应事件)_请描述trackbarname,wname,value,count,onchange,userdat-程序员宅基地

文章浏览阅读6.7k次,点赞2次,收藏12次。目录1 图像窗口滑动条2 鼠标响应窗口交互操作可以方便用户对程序流程进行操作,能使用户根据不同需求实现不同的处理效果。有时,某一个参数的需要反复调试不同的数值来确定,使用图像窗口滑动条可以快速确定这些参数值。因此交互操作不仅可以在程序运行过程中改变参数数值、避免重复运行程序、节省时间,还能够增加结果的对比效果。1 图像窗口滑动条图像窗口滑动条就是在显示图像的窗口中创建的能够通过滑动改变数值的滑动条,它可以帮助我们动态调节某些参数,使图像处理的效果更加明显。在OpenCV4中可以使用cv.createT_请描述trackbarname,wname,value,count,onchange,userdata参数对应的含义。

计算机专业证书难度,计算机专业应该考这些证书!-程序员宅基地

文章浏览阅读1.5k次,点赞2次,收藏6次。原标题:计算机专业应该考这些证书!在“互联网+”时代下,新兴互联网产业的崛起,也让传统行业在向互联网方向转行,现互联网行业已然成为继金融业后最有前途的行业,而强大的市场需求,也刺激了着高校计算机专业招生,让不少计算机类专业毕业生变得炙手可热。虽然很多专业都跟计算机有关,但因就业市场上有偏差的人才需求,不同学科有着不同的就业方向和前景。要想在就业市场上崭露头角,计算机专业证书是必不可少的一张“敲门砖..._计算机方面最难的证书

探索 ParallaxSwipeBack:创新的Android滑动返回效果库-程序员宅基地

文章浏览阅读379次,点赞3次,收藏7次。探索 ParallaxSwipeBack:创新的Android滑动返回效果库项目地址:https://gitcode.com/bushijie/ParallaxSwipeBackParallaxSwipeBack 是一个专为Android开发者设计的开源库,它提供了独特的视差滚动效果,使得应用程序在执行滑动返回操作时,能够呈现出更为生动和沉浸式的用户体验。本文将详细介绍该项目的特性、技术实现及...

轻松掌握:在Chrome浏览器中安装Vue.js DevTools插件_chrome vue.js 插件-程序员宅基地

文章浏览阅读978次,点赞12次,收藏14次。本文详细指导如何在Google Chrome浏览器中安装Vue.js DevTools插件,包括通过Chrome网上应用店直接安装和离线手动添加两种方法。安装后,开发者可利用Vue.js DevTools提供的丰富调试功能,如组件树视图、状态快照等,提升Vue项目的开发效率与问题定位能力。_chrome vue.js 插件

python数据挖掘实战笔记——文本分析(6):关键词提取_关键词比较排序文档python数据挖掘-程序员宅基地

文章浏览阅读7.9k次,点赞7次,收藏66次。紧接上篇的文档,这节学习关键字的提取,关键词——keyword,是人们快速了解文档内容,把握主题的重要内容。#导入需要的模块import osimport codecsimport pandasimport jiebaimport jieba.analyse#搭建语料库for root, dirs, files in os.walk( r"C:\Users\www12\De..._关键词比较排序文档python数据挖掘

随便推点

Linux网络编程——UDP编程_linux udp编程-程序员宅基地

文章浏览阅读2.4k次,点赞2次,收藏18次。UDP通信的相关函数和实际案例代码。_linux udp编程

相关问题排查参数或方法_1 running 146 sleeping 说明什么-程序员宅基地

文章浏览阅读193次。jmc 远程连接 java启动增加如下参数-Dcom.sun.management.jmxremote.port=7091-Dcom.sun.management.jmxremote.authenticate=false-Dcom.sun.management.jmxremote.ssl=false可以分析堆内存 cpu等TCPnetstat -ant CLOSED:无连接是活动的或正在进行LISTEN:服务器在等待进入呼叫SYN_RECV:一个连接请求已经到达,等待确认SY..._1 running 146 sleeping 说明什么

戴尔7060安服务器系统,戴尔7060装win7系统教程和BIOS设置方法(USB驱动可用)-程序员宅基地

文章浏览阅读3.9k次。戴尔OptiPlex7060系列产品是这款商业台式电脑系列产品,该系列产品选用Intel酷睿第八代Cpu。默认设置自带了win10系统软件,近期有许多网民改了win7后发觉进不了系统,因为默认设置戴尔OptiPlex7060系列产品安裝win7是没法应用的,除开BIOS时要关掉安全性起动外,也要选用win7新品手机,否则安裝后USB和集显不可以应用,要选用本网站的win7新品手机才能够,那麼..._戴尔7060mff装系统

django数据库模型搭建_django 项目必须要通过django去创建数据库吗-程序员宅基地

文章浏览阅读255次。目录一、数据库建模二、Django模型搭建1 创建app2.数据库建模3.settings.py 配置(1)安装app(2)数据库配置4.数据库同步(1)django校验(2)数据库语句生成(3)数据库同步(4)进入数据库检查表网站开发建模网站开发建模和数据库建模相似,主要通过描述网站业务实体和实体之间的关系来创建数据库一、数据库建模..._django 项目必须要通过django去创建数据库吗

Java Runtime类源码分析(开发“Java命令执行器”前期准备)_java runtime源码解析-程序员宅基地

文章浏览阅读1.1k次。介绍Runtime类中执行windows/linux命令的所涉及的定义方法在Java中什么是Runtime?每个 Java 应用程序都有一个Runtime类的单个实例,它允许应用程序与应用程序运行的环境进行交互。(任何人) 可以从getRuntime方法获取当前运行时。Runtime中定义方法解析//返回与当前 Java 应用程序关联的运行时对象。 Runtime类的大多数方法都是实例方法,必须针对当前运行时对象调用。 public static Runtime getRunt_java runtime源码解析

epoll的条件触发和边缘触发_epoll 边缘触发 条件-程序员宅基地

文章浏览阅读484次。目录条件触发:边缘触发:边缘触发服务器端的实现方法:“条件触发(Level Trigger)中,只要输入缓冲区中有数据就会一直通知该事件”eg:服务器端接收缓冲区收到50字节的数据时,服务器端操作系统将通知该事件,但服务器端读取20字节还剩30字节的情况下,仍会注册事件。也就是说,条件触发方式中,只要接收缓冲区中还有数据,就将以事件方式再次注册。边缘触发(Edge Trig..._epoll 边缘触发 条件

推荐文章

热门文章

相关标签