java处理16进制字符串的一些方法和基础知识

前言:本篇文章是对于基础数据的处理的一些简单经验总结里边包含了一些基础的数据储存和数据转化的一些知识,同样也包含有部分快捷的数据处理方法。主要用于个人知识的一个记录和方便进行对应的数据转换和处理。

1、bit,字节和字的关系

1.1 bit和字节的互相转化

比特的基础定义

  • 比特

  • 表示二进制位

  • 11010100是一个8位二进制数

  • 计算机存储信息的最小单位

字,字节和位的关系
  • 1位=1比特

  • 1Byte=8bit

  • 1字=2字节

  • 1字节=8位

  • 1字=16位

bit和字节的转化实例

bit和字节在转化时往往有些分不清具体bit是如何计算位数的,故留此图做分辨

bit和字节互相转化的代码

bit和字节其实可以通过Integer的toBinaryString和toHexString进行16进制和二进制的互相转化,但为了能在程序中便捷的操作每个bit位,故总结了以下方法实现16进制字符串转化为2进制字符串

/**
* 16进制字符转化为二进制字符串
* @param hex
* @return String
*/
public static String hexStringToBitString(String hex) {byte[] bytes = hexStr2Byte(hex);return byteToBitString(bytes);
}public static String byteToBitString(byte[] bytes) {String res = "";for (Byte aByte : bytes) {String binaryString = Integer.toBinaryString(aByte);int length = binaryString.length();if (length < 8) {for (int i = 0; i < 8 - length; i++) {binaryString = "0" + binaryString;}}res = binaryString.substring(binaryString.length() - 8);}return res;
}//二进制字符串转16进制
String a = "11011";
String b = Integer.toHexString(Integer.parseInt(a, 2));
System.out.println("二进制"+a+",转换为十六进制为:"+b);

1.2、多字的存储和解析

在我们使用计算机时,往往不可能单纯使用1个字节进行数据的传输,往往会使用多个字节进行传输和存储,因此,此时便涉及到另两个数据存储名词——大端存储和小端存储

基础概念

大端是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,地址由小向大增加,而数据从高位往低位放;

小端是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中。

假设有一个整型数0x12345678,从图中可以看出明显的区别:

因此,我们在处理数据时也要考虑这个问题,一般来说,大端存储的数据是符合我们读取和解析的习惯的,但对于小端存储的数据,我们就需要做对应的处理。

处理方法
在Java中,我们常常使用截取并倒置单个字的形式来处理小端数据,具体数据处理代码如下,以下是四个字节代码的处理方式,我们可以根据字段长度进行对应拓展。

/**
* 该方法将高低位进行转换
* 许转换的高于2字节,char,unsignChar ,int等
* @param hex : 需要反转的数据
* @return
*/
public static String parseHexString(String hex) {String res = "";if (hex.length() % 2 != 0) {throw new RuntimeException("数据长度错误!");}switch (hex.length()) {case 4 :res = hex.substring(2, 4) + hex.substring(0, 2);break;case 6 :res = hex.substring(4, 6) + hex.substring(2, 4) + hex.substring(0, 2);break;case 8 :res = hex.substring(6, 8) + hex.substring(4, 6) + hex.substring(2, 4) + hex.substring(0, 2);break;case 16 :res = hex.substring(14, 16) + hex.substring(12, 14) + hex.substring(10, 12) + hex.substring(8, 10) +hex.substring(6, 8) + hex.substring(4, 6) + hex.substring(2, 4) + hex.substring(0, 2);}return res;
}

2、ASCII码,ANSI码和16进制字符串的转化

2.1 基础定义

ASCII码
  • American Standard Code for Information Interchange, 叫做“美国信息交换标准码”。

  • 一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间

ANSI码

ANSI编码是一种对ASCII码的拓展 ANSI编码用0x00–0x7f (即十进制下的0到127)范围的1 个字节来表示 1 个英文字符 超出一个字节的 0x80~0xFFFF 范围来表示其他语言的其他字符

2.2、相关转化方法和测试

//ASCII转str   
public static String strToAscii(String str) {StringBuilder builder = new StringBuilder();char[] chars = str.toCharArray();for (int i = 0; i < chars.length; i++) {builder.append((int)chars[i]);}return builder.toString();
}//IntStr转ASCII   
public static String asciiToIntStr(String asc) {char[] chars = asc.toCharArray();StringBuilder r = new StringBuilder();for (char aChar : chars) {r.append(Integer.toHexString((int) aChar));}return r.toString();
}//测试程序
public static void main(String[] args) {Scanner scanner =new Scanner(System.in);System.out.println("请输入数据~~");String msg = scanner.nextLine();String b = ParseUtils.asciiToIntStr(msg);System.out.println(b);System.out.println("你输入的是:"+msg);
}

3、java处理负数

16进制的负数一般是以FF做开头的,我们在处理数据的时候也会用到不同的方法,常见的包括补齐数位,然后进行相应转化:

/**
* 16进制求十进制真值
*/
public static Integer getComplement(String data) {if (data == null || "".equals(data)) {return null;}StringBuilder sb = new StringBuilder();int i =0;while (i < data.length()) {i++;sb.append("F");}String binaryString = Integer.toBinaryString(Integer.valueOf(data,16));while (binaryString.length()<16){binaryString="0"+binaryString;}if (binaryString.toUpperCase().startsWith("1")) {// 默认补码代表负数return - (Integer.valueOf(sb.toString(), 16) - Integer.valueOf(data, 16) + 1);} else {return Integer.valueOf(data, 16);}}

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

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

相关文章

2024全新开发API接口调用管理系统网站源码 附教程

2024全新开发API接口调用管理系统网站源码 附教程 用layui框架写的 个人感觉很简洁 方便使用和二次开发

腾讯云MPS为出海媒体企业助力

在如今互联网发达的时代&#xff0c;一个视频通过网络发布即可供给全球用户进行观看。其中视频媒体企业便其中的领头先锋&#xff0c;为了让创作者们以及全球各大用户的视频进行快速推广&#xff0c;出海则是不二之选。但是因为各地区域的不同&#xff0c;带宽的不同与网络的限…

深信服技术认证“SCSA-S”划重点:逻辑漏洞

为帮助大家更加系统化地学习网络安全知识&#xff0c;以及更高效地通过深信服安全服务认证工程师考核&#xff0c;深信服特别推出“SCSA-S认证备考秘笈”共十期内容&#xff0c;“考试重点”内容框架&#xff0c;帮助大家快速get重点知识~ 划重点来啦 *点击图片放大展示 深信服…

桌面显示器type-c接口方案

在当今时代&#xff0c;TYPE-C接口桌面显示器已经成为了我们生活和工作中不可或缺的重要设备之一。与传统显示器相比&#xff0c;新型的TYPE-C接口桌面显示器具有更多的功能和优势&#xff0c;其中最显著的特点就是支持视频传输和充电功能。 首先&#xff0c;TYPE-C接口桌面显示…

[ACM 学习] 最长上升子序列

LIS&#xff08;最长上升子序列&#xff09;的三种经典求法 - 一只不咕鸟 - 博客园 (cnblogs.com) 理解一下第三种方法&#xff08;贪心二分查找&#xff09; 因为构建的是上升子序列&#xff0c;所以是可以用二分查找找到最大的小于当前 A[i] 的在子序列中的 F[j]&#xff0…

关于steam游戏搬砖,想给大家的几点忠告

关于CSGO游戏搬砖&#xff0c;想给大家的几点忠告&#xff1a; 1、新出的箱子&#xff0c;里面开出的皮肤短时间内会溢价&#xff0c;价格虚高&#xff0c;后期会呈逐渐下跌趋势&#xff0c;这就是我们不让大家碰新品的原因&#xff0c;哪怕利润再高也不建议购入或者囤货&…

Linux Mii management/mdio子系统分析之五 PHY状态机分析及其与net_device的关联

&#xff08;转载&#xff09;原文链接&#xff1a;https://blog.csdn.net/u014044624/article/details/123303714 前面几章基本上完成了mdio模块驱动模型的分析&#xff0c;本篇文章主要讲述phy device的状态机以及phy device与net_device的关联。Phy device主要是对phy的抽象…

C语言:自定义类型——结构体

一、什么叫做结构体 C语⾔已经提供了内置类型&#xff0c;如&#xff1a;char、short、int、long、float、double等&#xff0c;但是只有这些内置类型还是不够的&#xff0c;假设我想描述学⽣&#xff0c;描述⼀本书&#xff0c;这时单⼀的内置类型是不⾏的。描述⼀个学⽣需要 …

SMD NTC Thermistor NTC热敏电阻产品基本参数定义

热敏电阻器&#xff08;Thermistor&#xff09;是一种电阻值对温度极为灵敏的半导体元件&#xff0c;温度系数可分为Positive Temperature Coefficient 正温度系数热敏电阻又称PTC热敏电阻和Negative Temperature Coefficient 负温度系数热敏电阻又称NTC热敏电阻. NTC热敏电…

Seata分布式事务

文章目录 Seata分布式事务1.分布式事务问题1.1.本地事务1.2.分布式事务 2.理论基础2.1.CAP定理2.1.1.一致性2.1.2.可用性2.1.3.分区容错2.1.4.矛盾 2.2.BASE理论2.3.解决分布式事务的思路 3.初识Seata3.1.Seata的架构3.2.部署TC服务3.2.1.下载3.2.2.解压3.2.3.修改配置3.2.4.在…

【JVM】常用命令

一、前言 Java虚拟机&#xff08;JVM&#xff09;是Java程序运行的基础设施&#xff0c;它负责将Java字节码转换为本地机器代码并执行。在开发过程中&#xff0c;我们经常需要使用一些命令来监控和管理JVM的性能和状态。本文将详细介绍6个常用的JVM命令&#xff1a;jps、jstat…

Linux平台建立GB28181设备模拟器

目录 下载模拟器解决动态库缺少问题运行模拟器抓包参考资料 在没有GB28181摄像机的情况下,在Linux虚拟机中模拟出一台GB28181摄像机用于调试和学习. 下载模拟器 到网站下载Linux 平台版本: https://www.happytimesoft.com/download.html tar -zxvf happytime-gb28181-device…

腾讯云服务器定价_云服务器价格_云服务器计费模式

腾讯云服务器租用价格表&#xff1a;轻量应用服务器2核2G3M价格62元一年、2核2G4M价格118元一年&#xff0c;540元三年、2核4G5M带宽218元一年&#xff0c;2核4G5M带宽756元三年、轻量4核8G12M服务器446元一年、646元15个月&#xff0c;云服务器CVM S5实例2核2G配置280.8元一年…

创新与竞争:Facebook如何在社交媒体市场站稳脚跟

社交媒体市场一直都是激烈的竞争场地&#xff0c;而Facebook凭借其创新的战略一直站稳脚跟&#xff0c;不断引领行业潮流。本文将深入探讨Facebook是如何通过创新与竞争策略&#xff0c;在社交媒体市场中牢牢占据领导地位的。 多元化产品布局 Facebook并非只是一家单一产品的公…

[Java刷算法]牛客—剑指offer第一天

&#x1f9db;‍♂️个人主页&#xff1a;杯咖啡&#x1f4a1;进步是今天的活动&#xff0c;明天的保证&#xff01;✨目前正在学习&#xff1a;SSM框架,算法刷题&#x1f64c;牛客网&#xff0c;刷算法过面试的神级网站&#xff0c;用牛客你也牛。 &#x1f449;免费注册和我一…

我成为开源贡献者的原因竟然是做MySql-CDC数据同步

今年下半年机缘巧合下公司决定搭建自己的数据中台&#xff0c;中台的建设势必少不了数据集成。首先面临的就是数据集成技术选型的问题&#xff0c;按照社区活跃度、数据源适配性、同步效率等要求对市面上几个成熟度较高的开源引擎进行了深度调研。 最终经过内部讨论决定用Apac…

云服务器部署Stable Diffusion Webui从0到1总结:反复重启+循环debug

文章目录 在学校服务器部署Stable Diffusion Webui&#xff08;一&#xff09;准备工作&#xff08;二&#xff09;环境配置&#xff08;三&#xff09;git拉取项目到本地&#xff08;四&#xff09;运行项目 遇到的问题&#xff1a;&#xff08;一&#xff09;使用git clone时…

JAVAEE初阶 多线程进阶(二)

多线程进阶相关知识点 一.CAS1.1 CAS的原子类1.2 实现自旋锁1.3CAS中的ABA问题1.4 ABA问题的解决 二. callable接口三.reentrantLock3.1 reentrantLock与synchronized区别 四.信息量 semaphore五. CountDownLatch六. concurrentHashMap6.1 concurrentHashMap的优点 一.CAS CAS …

如何解决csgo搬砖饰品买了跌价的问题

大家好&#xff0c;我是阿阳。 经常有粉丝问&#xff1a;近期是该买还是该抛&#xff0c;每次买了就跌&#xff0c;抛了就涨&#xff0c;太揪心了。 在这聊聊阿阳自己对这个问题的看法&#xff0c;首先大家都知道csgo游戏搬砖从饰品持有时间长短&#xff0c;可以分为两类&…

【Python学习】Python学习20- 面向对象(1)

目录 【Python学习】Python学习20- 面向对象&#xff08;1&#xff09; 前言面向对象技术简介类的创建实例&#xff1a;创建实例对象访问属性 Python内置类属性完整代码输出 参考 文章所属专区 Python学习 前言 本章节主要说明Python的面向对象的处理。Python从设计之初就已经…