Java实现byte数组与Hex互转

news2024/11/27 11:22:29
十六进制字符的输出大写字符:0123456789ABCDEF
十六进制字符的输出小写字符:0123456789abcdef

下面使用十六进制大写字符。

1、方式1

public class HexStringUtils {
    private static final char[] HEX_CHAR_TABLE = {
            '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
    };
    private static final Map<Character, Byte> HEX_BYTE_MAP = new HashMap<>();

    static {
        for (int i = 0; i < HEX_CHAR_TABLE.length; i++) {
            char c = HEX_CHAR_TABLE[i];
            HEX_BYTE_MAP.put(c, (byte) i);
        }
    }

    /**
     * 将byte数组转换为表示16进制值的字符串
     *
     * @param byteArray 需要转换的byte数组
     * @return 转换后的字符串(16进制值)
     */
    public static String byteArrayToHexString(byte[] byteArray) {
        if (byteArray == null) {
            return null;
        }
        StringBuilder sb = new StringBuilder();
        for (byte b : byteArray) {
            sb.append(HEX_CHAR_TABLE[(b & 0xf0) >> 4]);
            sb.append(HEX_CHAR_TABLE[b & 0x0f]);
        }
        return sb.toString();
    }

    /**
     * 将表示16进制值的字符串转换为byte数组
     *
     * @param hexString 需要转换的字符串(16进制值)
     * @return 转换后的byte数组
     */
    public static byte[] hexStringToByteArray(String hexString) {
        if (StringUtils.isBlank(hexString)) {
            return null;
        }
        // 两个字符表示一个字节,所以字节数组长度是字符串长度除以2
        byte[] byteArray = new byte[hexString.length() / 2];
        for (int i = 0; i < hexString.length() / 2; i++) {
            char hi = hexString.charAt(i * 2);
            char lo = hexString.charAt(i * 2 + 1);
            byteArray[i] = (byte) ((HEX_BYTE_MAP.get(hi) << 4) + HEX_BYTE_MAP.get(lo));
        }
        return byteArray;
    }

    public static void main(String[] args) {
        String str = "你好 asa;==ff--00=-=";
        //
        String hexString = byteArrayToHexString(str.getBytes());
        System.out.println(str.length());
        System.out.println(hexString);
        System.out.println(hexString.length());

        System.out.println("===========");
        byte[] bytes = hexStringToByteArray(hexString);
        System.out.println(Arrays.toString(bytes));
        System.out.println(new String(bytes));
    }
}

在这里插入图片描述

2、方式2

public class HexStringUtils {

    public static byte[] hexStringToByteArray(String hexString) {
        if (StringUtils.isEmpty(hexString)) {
            return null;
        }
        hexString = hexString.toLowerCase();
        final byte[] byteArray = new byte[hexString.length() >> 1];
        int index = 0;
        for (int i = 0; i < hexString.length(); i++) {
            if (index > hexString.length() - 1) {
                return byteArray;
            }
            byte highDit = (byte) (Character.digit(hexString.charAt(index), 16) & 0xFF);
            byte lowDit = (byte) (Character.digit(hexString.charAt(index + 1), 16) & 0xFF);
            byteArray[i] = (byte) (highDit << 4 | lowDit);
            index += 2;
        }
        return byteArray;
    }


    public static String byteArrayToHexString(byte[] byteArray) {
        if (byteArray == null) {
            return null;
        }
        // HEX_CHAR_TABLE  0123456789abcdef
        char[] hexArray = "0123456789ABCDEF".toCharArray();
        char[] hexChars = new char[byteArray.length * 2];
        for (int j = 0; j < byteArray.length; j++) {
            int v = byteArray[j] & 0xFF;
            hexChars[j * 2] = hexArray[v >>> 4];
            hexChars[j * 2 + 1] = hexArray[v & 0x0F];
        }
        return new String(hexChars);
    }

    public static void main(String[] args) {
        String str = "你好 asa;==ff--00=-=";
        //
        String hexString = byteArrayToHexString(str.getBytes());
        System.out.println(str.length());
        System.out.println(hexString);
        System.out.println(hexString.length());

        System.out.println("===========");
        byte[] bytes = hexStringToByteArray(hexString);
        System.out.println(Arrays.toString(bytes));
        System.out.println(new String(bytes));
    }

}

– 求知若饥,虚心若愚。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1041617.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

00-MySQL数据库的使用-上

一 数据库基础知识 先谈发音 MySQL如何发音&#xff1f;在国内MySQL发音有很多种&#xff0c;Oracle官方文档说 他们念作 My sequal[si:kwəl]。 数据库基本概念 数据 数据&#xff08;Data&#xff09;是指对客观事物进行描述并可以鉴别的符号&#xff0c;这 些符号是可识别…

一篇文章全面解析Modbus协议中的消息帧

在 Modbus网络通信的两种传输模式中&#xff08; ASCII或RTU&#xff09;&#xff0c;传输设备以将Modbus消息转为有起点和终点的帧&#xff0c;这就允许接收的设备在消息起始处开始工作&#xff0c;读地址分配信息&#xff0c;判断哪一个设备被选中&#xff08;广播方式则传给…

MySQL 基础

本系列文章为【狂神说 Java 】视频的课堂笔记&#xff0c;若有需要可配套视频学习。 1. 简介 数据库&#xff08;DB&#xff0c;Database&#xff09;是安装在操作系统上的存储数据的软件。 关系型数据库&#xff08;RDB&#xff09;以行列形式存储数据。 非关系型数据库&am…

如何访问TDH中Inceptor 底层的元数据库TxSQL

如何访问TDH中Inceptor 底层的元数据库TxSQL 1 Inceptor概述 在大数据生态系统中&#xff0c;HIVE是离线数据仓库事实上的标准&#xff0c;绝大多数的大数据分析型系统或数据仓库系统&#xff0c;都是基于HIVE来构建的。 在星环的大数据平台TDH中&#xff0c;在功能上对应开…

PWN环境搭建

虚拟机Ubuntu安装 工具&#xff1a;Vmware 16 以及 Ubuntu 18或20 来源&#xff1a;清华大学开源软件镜像站 | Tsinghua Open Source Mirror 虚拟机安装流程 安装很简单&#xff0c;按照提示一步步来即可 处理器可以多给一些&#xff0c;我给了8个&#xff0c;内核数量不…

CCS介绍

CCS介绍 设置主体颜色 修改字体的颜色和大小 安装一些插件 CCS中的App中心 切换工作空间 导入工程

CarbonData详细解析

一、CarbonData简介 CarbonData是一种新型的Apache Hadoop本地文件格式&#xff0c;使用先进的列式存储、索引、压缩和编码技术&#xff0c;以提高计算效率&#xff0c;有助于加速超过PB数量级的数据查询&#xff0c;可用于更快的交互查询。同时&#xff0c;CarbonData也是一种…

AnyDesk多ID集中控制台V2.0

网盘下载 AnyDesk多ID集中控制台V2.0 软件介绍&#xff1a; 首先大家要知道AnyDesk软件是干嘛的&#xff1f;国外的远程协助工具&#xff0c;和TeamViewer同一个软件&#xff0c;TeamViewer确定需要登录&#xff0c;使用限制5分钟等等缺点&#xff0c;所以自己就用易语言开发An…

uni-app:实现页面效果1

效果 代码 <template><view><view class"add"><image :src"add_icon" mode""></image></view><view class"container_position"><view class"container_info"><view c…

69.渲染函数如何提高Vue应用程序的效率

通过使用虚拟 DOM&#xff0c;Vue 可以比直接操作真实 DOM 更高效地更新和渲染用户界面。渲染函数可用于在服务器上预渲染组件&#xff0c;从而提高应用程序的初始加载性能。渲染函数可让我们完全控制组件的结构和内容&#xff0c;从而构建自定义的复杂用户界面。 h() 函数&…

Java笔记:手写spring之aop

手写spring之aop 仓库地址: Raray-chuan/mini-spring 博文列表: 导读手写spring之ioc手写spring之aop手写spring之简单实现springboot 1.什么是AOP AOP(Aspect-oriented Programming), AOP翻译过来叫面向切面编程, 核心就是这个切面. 切面表示从业务逻辑中分离出来的横切…

【排序算法】冒泡排序、插入排序、归并排序、希尔排序、选择排序、堆排序、快速排序

目录 几大排序汇总 1.冒泡排序 性能: 思路和代码: 2.插入排序 性能: 思路和代码: 3.归并排序 性能: 思路和代码: 4.希尔排序 性能: 思路和代码: 5.选择排序 性能: 思路和代码: 6.堆排序 性能: 思路和代码: topK问题 7.快速排序 性能: 思路和代码: 几大排…

vue3自定义全局Loading

自定义插件之全局Loading ElementPlus的默认全局Loading 如果完整引入了 Element Plus&#xff0c;那么 app.config.globalProperties 上会有一个全局方法$loading&#xff0c;同样会返回一个 Loading 实例。 名称说明类型默认targetLoading 需要覆盖的 DOM 节点。 可传入一…

田忌赛马Java

给定两个大小相等的数组 A 和 B&#xff0c;A 相对于 B 的优势可以用满足 Ai] > Bi] 的索的数目来描述。 返回 A的任意排列&#xff0c;使其相对于 B 的优势最大化. 其实核心思想就是让A中的数最小且刚好大于B中数,我们可以用链表来存储A和B中对应的数据,至于B比A中所有的数…

优优嗨聚集团:餐饮发展与房地产的关联:一种强效应的探索

随着时代的进步和经济的发展&#xff0c;餐饮业和房地产行业已成为人们日常生活中的重要组成部分。这两个行业之间存在着复杂的联系&#xff0c;它们相互影响、相互促进&#xff0c;形成了独特的经济现象。本文将从多个角度分析餐饮发展与房地产之间的关联&#xff0c;并探讨这…

苹果Vision Pro头显内置AI芯片

苹果首席执行官蒂姆库克近日在接受采访时确认&#xff0c;备受瞩目的Vision Pro头显将按计划于明年初在美国上市。这款头显被认为是苹果自iPhone以来最重要的产品之一&#xff0c;售价高达3499美元。 蒂姆库克在接受CBS Sunday Morning的采访时透露&#xff0c;他的团队对Visi…

一、浏览器输入URL会发生什么

参考链接&#xff1a;B站视频链接&#xff1a;https://www.bilibili.com/video/BV1qL411G7uj/ 本视频讲述了HTTP协议及其工作原理&#xff0c;包括HTTP协议的三次握手建立TCP连接、HTTP请求报文、HTTP响应报文等。同时&#xff0c;本视频还介绍了浏览器解析域名并建立TCP连接的…

Failed to load property source from location ‘classpath:/application.yml‘

前言 给同学部署项目的时候出现了这个错误&#xff0c;困扰我半天&#xff0c;搞了一下午&#xff0c;最后Google找到了答案。 在这里记录一下&#xff01; 解决方案 第一步&#xff1a;删除原有yml文件&#xff0c;把内容复制下来&#xff0c;重新写一个然后再粘贴进去 …

基于微信小程序的车位预定系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言用户的主要功能有&#xff1a;管理员的主要功能有&#xff1a;具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W…

96.不同的二叉搜索树

​ 题目&#xff1a; 96. 不同的二叉搜索树 中等 2.4K 相关企业 给你一个整数 n &#xff0c;求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种&#xff1f;返回满足题意的二叉搜索树的种数。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xf…