java基础之byte转换工具类

2023-05-16

1、Byte[] 转 byte[] 

public static byte[] toPrimitives(Byte[] oBytes) {
        byte[] bytes = new byte[oBytes.length];
        for (int i = 0; i < oBytes.length; i++) {
            bytes[i] = oBytes[i];
        }
        return bytes;
}

2、byte[] 转 Byte[]

public static Byte[] toObjects(byte[] bytesPrim) {
    Byte[] bytes = new Byte[bytesPrim.length];
    int i = 0;
    for (byte b : bytesPrim) bytes[i++] = b; // Autoboxing
    return bytes;
} 

3、byte转十六进制字符

public static String byteToHex(byte b) {
    String hex = Integer.toHexString(b & 0xFF);
    if (hex.length() == 1) {
        hex = '0' + hex;
    }
    return hex.toUpperCase(Locale.getDefault());
}

4、byte[] 转 字符串的bit

public static String byteToBit(byte[] bs) {
    String result = "";
    for (byte b : bs) {
        result = result
                + (byte) ((b >> 7) & 0x1) + (byte) ((b >> 6) & 0x1)
                + (byte) ((b >> 5) & 0x1) + (byte) ((b >> 4) & 0x1)
                + (byte) ((b >> 3) & 0x1) + (byte) ((b >> 2) & 0x1)
                + (byte) ((b >> 1) & 0x1) + (byte) ((b >> 0) & 0x1);
    }
    return result;
}

5、String 转 byte[]

public static byte[] stringToByteArr(String value, String decode) {
    try {
        return value.getBytes(decode);
    } catch (UnsupportedEncodingException e) {
        logger.error("String转化为byte数组", e);
    }
    return null;
}

6、byte[] 转 String

public static String byteArrToString(byte[] arr, String decode) {
    try {
        if (arr.length == 0) {
            return null;
        }
        return new String(arr, decode);
    } catch (UnsupportedEncodingException e) {
        logger.error("byte[] 数组转为 String", e);
    }
    return null;
}

7、byte[] 转 数值

/**
 * byte[] 转为一个数值
 *
 * @param arr   byte数组
 * @param isBig 是否大端模式
 * @param trim  字节长度(long=8, int=4, short=2, byte=1)
 * @return
*/
public static Number byteArrToNumber(byte[] arr, boolean isBig, int trim) {
    if (arr == null || arr.length == 0) {
        return null;
    }
    // 舍弃掉数组长度超过8的部分
    if (arr.length > trim) {
        for (int i = trim; i < arr.length; i++) {
            arr[i] = 0;
        }
    }
    long total = 0;
    for (int i = 0; i < arr.length; i++) {
        long arrVal = arr[i] & 0xFF;
        arrVal = isBig ? arrVal << ((arr.length - i - 1) * 8) : arrVal << ((i) * 8);
        total |= arrVal;
    }
    return total;
}

8、数值 转 byte[]

public static byte[] numberToByteArr(Number number, boolean isBig, int trim) {
    if (number == null) {
        return null;
    }
    if (trim <= 0) {
        return null;
    }
    long value = number.longValue();
    byte[] arr = new byte[trim];
    for (int i = 0; i < trim; i++) {
        long val = value >> (i * 8);
        val &= 0xff;
        if (isBig) {
            arr[trim - i - 1] = (byte) val;
        } else {
            arr[i] = (byte) val;
        }
    }
    return arr;
}

9、多个数组合并一个数组

public static byte[] arrayCopy(byte[]...arrays) {
    //数组长度
    int arrayLength = 0;
    //目标数组的起始位置
    int startIndex = 0;
    for (byte[] bytes: arrays) {
        arrayLength = arrayLength + bytes.length;
    }
    byte[] byteArray = new byte[arrayLength];
    for (int i = 0; i < arrays.length; i++) {
        if (i > 0) {
            //i为0时,目标数组的起始位置为0 ,i为1时,目标数组的起始位置为第一个数组长度
            //i为2时,目标数组的起始位置为第一个数组长度+第二个数组长度
            startIndex = startIndex + arrays[i - 1].length;
        }
        System.arraycopy(arrays[i], 0, byteArray, startIndex, arrays[i].length);
    }
    return byteArray;
}
public static byte[] arrayCopy(List<byte[]> list) {
    //数组长度
    int arrayLength = 0;
    //目标数组的起始位置
    int startIndex = 0;
    for (byte[] bytes: list) {
        arrayLength = arrayLength + bytes.length;
    }
    byte[] byteArray = new byte[arrayLength];
    for (int i = 0; i < list.size(); i++) {
        if (i > 0) {
            //i为0时,目标数组的起始位置为0 ,i为1时,目标数组的起始位置为第一个数组长度
            //i为2时,目标数组的起始位置为第一个数组长度+第二个数组长度
            startIndex = startIndex + list.get(i - 1).length;
        }
        System.arraycopy(list.get(i), 0, byteArray, startIndex, list.get(i).length);
    }
    return byteArray;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java基础之byte转换工具类 的相关文章

  • W25QXX使用教程

    W25QXX是华邦公司生产的一块FLASH储存芯片 那W25Q256为例 xff1a 驱动方式 xff1a 单路双路四路SPI QSPI xff1b 擦写周期 xff1a 10W次 支持电压 xff1a 2 7 3 6V 频率 xff1a
  • QT串口通信

    QT串口的使用 1 添加头文件2 串口通信的7个步骤3 发送接收数据 1 添加头文件 span class token macro property span class token directive keyword include sp
  • Qt存储图片到数据库&&从数据库读取图片

    使用Qt将图片存储到sqlite my sql span class token double colon punctuation span span class token function my sql span span class
  • SQL常用语句大全

    创建表and插入数据 课程表 span class token keyword create span span class token keyword database span stuinfo span class token comm
  • 2020-08-21 多路复用TCP双向通信

    多路复用TCP双向通信 首先说一下多路复用 多路的作用 xff1a 监测文件描述符的状态变化 监测文件描述符是否有数据可读写 状态变化 xff1a 有数据可读 xff0c 有数据可写 xff0c 异常 有可能需要监测多个文件描述符 多个文件
  • ros中gmapping建图

    准备 1之前在github上下载的双轮差速小车中有该小车的gmapping和键盘控制的文件可以直接用 2如果之前安装的不是ros的full版本还需要下载gmapping功能包 sudo apt get install ros indigo
  • ros导航仿真——定位与路径规划

    准备 之前在github上下载的差速双轮小车不仅有其对应的gmapping还有amcl和move base xff0c 其中amcl用于定位 xff0c move base 用于路径规划 首先启动小车 roslaunch diff whee
  • arm底层通讯接口之uart

    1 目的 写这篇博文的主要目的就是让其他初学者能够更快的理解 掌握uart串口通讯 xff0c 在学习底层接口通讯的时候 xff0c 我们要带着这么几个问题 xff1a 1 xff09 什么是uart 2 xff09 uart有什么用 3
  • ros中Odom话题与odom坐标系的理解

    odom话题发表的是odom坐标系到base link之间的转换关系 xff0c 以及机器人的速度 其中base like是机器人本体坐标系 xff0c 与机器人中心重合 xff0c 所以odom坐标系到base link之间的转换关系也就
  • 多机器人导航与编队(一)

    多个机器人中让领导者导航 xff0c 相比于单个机器人导航需要修改的参数如下 主要是多机器人中的领导者与单个机器人发布的话题名称不一样 小车启动文件设置与简化 1设置 在小车的xacro文件的diff插件中添加 span class tok
  • 多机器人导航与编队(二)

    小车导航文件设置 导航分为两部分 xff1a 定位amcl和规划move base xff08 我自己的项目 导航对应ares1 maze2 amcl launch里面包含ares1 amcl launch xml 对应定位amcl xff
  • 多个小车相同功能的节点编写以及launch文件相关设置

    对于n个小车的相同功能 xff0c 写cpp 1写n个cpp 2写1个cpp xff0c 将n个小车的内容集中到一起 3写1个cpp xff0c 长度与单个相同 在launch文件中启动n个这样相同的节点 传入n个不同的参数 关于launc
  • ROS 多机器人导航salm中的问题

    ros中slam理解 在ROS中 xff0c 进行导航需要使用到的三个包是 xff1a xff08 1 xff09 move base xff1a 根据参照的消息进行路径规划 xff0c 使移动机器人到达指定的位置 这个路径规划包括全局路径
  • 一文读懂串口(波形分析、起始位、数据位、停止位、空闲位)

    串口 一 串口 xff08 串行接口 xff09 二 异步串口 xff08 以下统称串口 xff09 三 重要参数1 波特率2 报文格式2 1 起始位2 2 数据位2 3 奇偶校验位2 4 停止位2 5 空闲位 四 波形1 具体连接2 波形
  • #学习笔记 keil环境下单片机模块化编程的方法

    1 选择 add new item to group 建立一个 c文件 xff0c 一个 h文件 xff0c 并且名字一致 2 h文件的写法 xff08 1 xff09 h文件中要有首位两段语言 例如 ifndef HEARTRATE H
  • 【Drone】航模遥控系统各协议简介

    最近学习了无人机的一些知识 xff0c 在关于遥控系统这部分的各种协议看的有些头大 xff0c 人都晕了 看了一些资料后终于大概理解了这套系统中那些一团乱麻般的各协议的意义 xff0c 大致总结一下 图一 遥控系统组成 这里参考FPV帮装机
  • C语言获取当前的工作路径

    在C语言中获取当前的工作路径的方法一般是用内置函数为 xff1a DWORD GetModuleFileName HMODULE hModule LPTSTR lpFilename DWORD nSize 函数的参数说明 xff1a hMo
  • C/C++的指针传递和引用传递

    相信你遇到过指针传参 值传参 引用传参 xff0c 这三个关系足够让你头脑爆炸 xff0c 搞不清楚三者的区别 但是恭喜你 xff0c 你看到了这篇文章 xff0c 小编保证你看后茅塞顿开 xff0c 一下子就顺畅了 首先 xff0c 我们
  • #define、typedef 和 using之间的联系和区别

    目录 一 define 1 含义 2 用处 1 条件编译 2 解宏 3 文件包含 二 typedef 1 含义 2 用处 1 数据类型别名 2 指针别名 3 结构体别名 4 与平台无关的数据类型 三 using 1 含义 2 用处 1 权限
  • C++四种cast的详细介绍

    目录 一 static cast 1 基本数据类型转换 2 指针和void指针的转换 3 父类和子类之间的转换 二 dynamic cast 三 const cast 1 加上const 2 去掉const xff08 1 xff09 co

随机推荐

  • C++内存模型简述

    目录 一 什么是内存模型 二 内存的分类 三 各分区例程 1 全局 静态存储区 2 常量区 3 栈 xff08 Stack xff09 区域 4 堆 xff08 Heap xff09 区域 四 堆和栈的区别 五 堆和自由存储区的区别 1 m
  • Eclipse的介绍和插件使用

    目录 一 Eclipse的介绍 二 快捷方式 三 常用快捷键 四 插件开发 五 插件安装 第一种 xff1a 直接复制法 第二种 xff1a 使用link文件法 第三种 xff1a 使用eclipse自带图形界面安装 第四种 xff1a 使
  • 动态时间规整算法——DTW

    没有做过机器学习的小伙伴们对这个算法应该不是特别的了解 xff0c 因为机器学习经常会用到这个算法 再将这个算法之前 xff0c 我们先看一下初中的知识点 欧几里得距离 在讲解动态时间规整算法 xff08 Dynamic Time Warp
  • C++ 中的基本输入/输出

    C 43 43 附带的库为我们提供了许多执行输入和输出的方法 在 C 43 43 中 xff0c 输入和输出以字节序列或更通常称为流的形式执行 输入流 xff1a 如果字节流的方向是从设备 xff08 例如 xff0c 键盘 xff09 到
  • 单例设计模式

    单例设计模式是一种经典的面向对象设计模式 xff0c 它允许在一个应用程序中只创建一个实例对象 xff0c 以便在整个应用程序中共享该对象的状态和行为 单例模式通常用于管理应用程序级别的资源 xff0c 例如数据库连接 线程池 配置对象等
  • 代理设计模式

    一 概述 代理设计模式是一种结构型设计模式 xff0c 它允许在一个对象和其它对象之间添加一个代理对象 xff0c 以控制对原始对象的访问 代理对象通常在访问原始对象之前或之后执行一些额外的操作 xff0c 例如记录日志 控制访问权限 缓存
  • C++线程入门:轻松并发编程

    在现代计算机应用程序中 xff0c 我们经常需要处理并发任务 xff0c 这就需要使用多线程来实现 C 43 43 是一种功能强大的编程语言 xff0c 提供了丰富的线程支持 xff0c 使得并发编程变得相对容易 C 43 43 线程是一种
  • 中断与DMA

    中断 Cortex M3256 个优先级和 128 个抢占级悬起pending 中断中断的类型中断结构 DMA通道映射源传输和目标传输寄存器中断状态寄存器和中断标志清除寄存器通道x配置DMA stream x configuration r
  • keil编译时候出现function “ ” declared implicitly的解决方法

    在警告信息function declared implicitly双引号中的 表示的是所调用函数 xff0c 在调用该函数的前加 extern 声明即可
  • 2022年高教社杯全国大学生数学建模国赛B题思路详解

    1 比赛报名与思路解析 xff08 持续更新750967193 xff09 2 比赛时间 xff1a 2022年9月15日18点到2022年9月18日20点 如下为B题思路 xff1a 先贴题目 xff1a 如下是初步分析 xff1a 无人
  • 旋转矩阵、欧拉角之间转换

    学习过程中涉及欧拉角和旋转矩阵的转换 xff0c 索性整理学习一下欧拉角四元数和旋转矩阵的概念以及matlab中的互相转换 本文摘自各大课本 xff0c 博客 xff0c 自己学习整理使用 xff0c 侵删 MATLAB矩阵乘法从左到右依次
  • ROS中C++ boost编程,类内回调函数

    首先熟悉boost bind 定义如下函数 xff1a span class token keyword int span span class token function f span span class token punctuat
  • 理解头文件(.h)、库文件(.lib)、和动态链接库文件(.dll),Fortran中的预处理及Fortran中function的简单使用

    文章目录 问题来源我的问题头文件 库文件和动态链接库头文件 h库文件 lib动态链接库 dll三者的关系静态链接动态链接 初识 Fortran 预处理包含文件 include Fortran中function简单使用声明interface调
  • OpenCV计算机视觉库,Tensorflow深度学习框架

    OpenCV是计算机视觉库 xff0c 包含了大量的图像处理和计算机视觉的算法 xff0c 但是在机器学习方面明显不足 xff0c ML模块只有SVM xff0c MLP xff0c kNN等有限的几种算法 dnn模块也是调用别的框架 Te
  • 动态库和静态库

    概念 什么是库 库是写好的 xff0c 现有的 xff0c 成熟的 xff0c 可以复用的代码 现实中每个程序都要依赖很多基础的底层库 xff0c 不可能每个人的代码都从零开始 xff0c 因此库的存在意义非同寻常 本质上来说 xff0c
  • Linux 内核设计与实现 —— 1.内核简介

    文章目录 操作系统和内核简介内核包括 xff1a 内核与应用程序 xff1a 内核与硬件设备 xff1a 内核的运行模式 xff1a Linux内核与Unix内核比较单内核与微内核设计之比较Linux内核与Unix内核差异 操作系统和内核简
  • VIM基础操作

    方向键 xff1a hjkl输入 向后输入 xff1a a shift最前向前输入 xff1a i shift最后向下新生成一行输入 xff1a o shift上一行删掉当前字符并写入 xff1a s 撤销 xff1a u键盘重映设 vim
  • Git基础操作

    Git基础操作 仓库配置初始化仓库查看当前所在仓库修改远端仓库 代码提交基础操作tag操作删除最后N次提交储藏 代码管理分支操作patch操作查看指定文件的修改历史统计代码量 仓库配置 初始化仓库 1 xff0c 安装 sudo apt g
  • Google SRE 自我评分——《Google SRE: How Google runs production systems》

    Google SRE How Google runs production systems 0 xff1a you are unfamiliar with the subject area 0 xff1a 不熟悉的领域 也就是说对相关的领域
  • java基础之byte转换工具类

    1 Byte 转 byte public static byte toPrimitives Byte oBytes byte bytes 61 new byte oBytes length for int i 61 0 i lt oByte