/*** 10进制字节数组转换为16进制字节数组** byte用二进制表示占用8位,16进制的每个字符需要用4位二进制位来表示,则可以把每个byte* 转换成两个相应的16进制字符,即把byte的高4位和低4位分别转换成相应的16进制字符,再取对应16进制字符的字节** @param b 10进制字节数组* @return 16进制字节数组*/public static byte[] byte2hex(byte[] b) {byte[] HEX_STRING_BYTE = HEX_CHAR.getBytes();int length = b.length;byte[] b2 = new byte[length << 1];int pos;for(int i=0; i<length; i++) {pos = 2*i;b2[pos] = HEX_STRING_BYTE[(b[i] & 0xf0) >> 4];b2[pos+1] = HEX_STRING_BYTE[b[i] & 0x0f];}return b2;}/*** 16进制字节数组转换为10进制字节数组** 16进制数组格式为无空格, 如:6E7F8C** 两个16进制字节对应一个10进制字节,则将第一个16进制字节对应成16进制字符表中的位置(0~15)并向左移动4位,* 再与第二个16进制字节对应成16进制字符表中的位置(0~15)进行或运算,则得到对应的10进制字节* @param b 16进制字节数组* @return 10进制字节数组*/public static byte[] hex2byte(byte[] b) {if(b.length%2 != 0) {throw new IllegalArgumentException("byte array length is not even!");}int length = b.length >> 1;byte[] b2 = new byte[length];int pos;for(int i=0; i<length; i++) {pos = i << 1;b2[i] = (byte) (HEX_CHAR.indexOf( b[pos] ) << 4 | HEX_CHAR.indexOf( b[pos+1] ) );}return b2;}/*** 将16进制字节数组转成10进制字符串* @param b 16进制字节数组* @return 10进制字符串*       建议使用hexBytes2String*/public static String hex2Str(byte[] b) {return new String(hex2byte(b));}/*** 将10进制字节数组转成16进制字符串* @param b 10进制字节数组* @return 16进制字符串*/public static String byte2HexStr(byte[] b) {return Integer.toHexString(Integer.parseInt(new String(b)));}/*** 将16进制字节数组转成10进制字符串* @param b 16进制字节数组* @return 10进制字符串*/public static String hexBytes2String(byte[] b) {String hexString = toHexString(b);Long parseInt = Long.parseLong(hexString,16);return String.valueOf(parseInt);}/*** 将10进制字符串转成16进制字节数组* @param string 10进制字符串* @return 16进制字符串*/public static byte[] string2hexBytes(String string) {String hexString = str2HexStr(string);byte[] hexBytes = toByteArray(hexString.replaceAll(" ",""));return hexBytes;}/*** 16进制字符串转换成字节数组** @param hex* @return*/public static byte[] hexStringToByte(String hex) {byte[] b = new byte[hex.length() / 2];int j = 0;for (int i = 0; i < b.length; i++) {char c0 = hex.charAt(j++);char c1 = hex.charAt(j++);b[i] = (byte) ((parse(c0) << 4) | parse(c1));}return b;}private static int parse(char c) {if (c >= 'a')return (c - 'a' + 10) & 0x0f;if (c >= 'A')return (c - 'A' + 10) & 0x0f;return (c - '0') & 0x0f;}/*** 字节数组转成16进制表示格式的字符串*  字符串无空格* @param byteArray*            需要转换的字节数组* @return 16进制表示格式的字符串**/public static String toHexString(byte[] byteArray) {if (byteArray == null || byteArray.length < 1){throw new IllegalArgumentException("this byteArray must not be null or empty");}final StringBuilder hexString = new StringBuilder();for (int i = 0; i < byteArray.length; i++) {if ((byteArray[i] & 0xff) < 0x10)// 0~F前面不零hexString.append("0");hexString.append(Integer.toHexString(0xFF & byteArray[i]));}return hexString.toString().toLowerCase();}/*** 字符串表示转成16进制字节数组** @param hexString*            16进制格式的字符串* @return 转换后的字节数组**/public static byte[] toByteArray(String hexString) {if (StringUtils.isEmpty(hexString)){throw new IllegalArgumentException("this hexString must not be empty");}hexString = hexString.toLowerCase();final byte[] byteArray = new byte[hexString.length() / 2];int k = 0;// 因为是16进制,最多只会占用4位,转换成字节需要两个16进制的字符,高位在先for (int i = 0; i < byteArray.length; i++) {byte high = (byte) (Character.digit(hexString.charAt(k), 16) & 0xff);byte low = (byte) (Character.digit(hexString.charAt(k + 1), 16) & 0xff);byteArray[i] = (byte) (high << 4 | low);k += 2;}return byteArray;}/*** 字符串转换成十六进制字符串** @param String str 待转换的ASCII字符串* @return String 每个Byte之间空格分隔,如: [61 6C 6B]*/public static String str2HexStr(String str) {char[] chars = "0123456789ABCDEF".toCharArray();StringBuilder sb = new StringBuilder("");byte[] bs = str.getBytes();int bit;for (int i = 0; i < bs.length; i++) {bit = (bs[i] & 0x0f0) >> 4;sb.append(chars[bit]);bit = bs[i] & 0x0f;sb.append(chars[bit]);sb.append(' ');}return sb.toString().trim();}/*** 十六进制转换字符串** @param String str Byte字符串(Byte之间无分隔符 如:[616C6B])* @return String 对应的字符串*/public static String hexStr2Str(String hexStr) {String str = "0123456789ABCDEF";char[] hexs = hexStr.toCharArray();byte[] bytes = new byte[hexStr.length() / 2];int n;for (int i = 0; i < bytes.length; i++) {n = str.indexOf(hexs[2 * i]) * 16;n += str.indexOf(hexs[2 * i + 1]);bytes[i] = (byte) (n & 0xff);}return new String(bytes);}/*** 将十六进制字符转换成一个整数** @param ch    十六进制char* @param index 十六进制字符在字符数组中的位置* @return 一个整数* @throws RuntimeException 当ch不是一个合法的十六进制字符时,抛出运行时异常*/protected static int toDigit(char ch, int index) {int digit = Character.digit(ch, 16);if (digit == -1) {throw new RuntimeException("Illegal hexadecimal character " + ch+ " at index " + index);}return digit;}/*** 将int数值转换为占四个字节的byte数组 ,正序 ,低位在前,高位在后* @param value   要转换的int值* @return byte数组*/public static byte[] intToBytesLH(int value)   {byte[] src = new byte[4];src[3] =  (byte) ((value>>24) & 0xFF);src[2] =  (byte) ((value>>16) & 0xFF);src[1] =  (byte) ((value>>8) & 0xFF);src[0] =  (byte) (value & 0xFF);return src;}/*** 将byte数组转换为int数值,正序 ,低位在前,高位在后* @param  byte数组 ,起始位* @return   int*/public static int bytesToIntLH(byte[] src, int offset) {int value;value = (int) ((src[offset] & 0xFF)| ((src[offset+1] & 0xFF)<<8)| ((src[offset+2] & 0xFF)<<16)| ((src[offset+3] & 0xFF)<<24));return value;}/*** 将int数值转换为占四个字节的byte数组 ,降序 ,高位在前,低位在后@param value  要转换的int值* @return byte数组*/public static byte[] intToBytes(int value)   {byte[] src = new byte[4];src[0] = (byte) ((value>>24) & 0xFF);src[1] = (byte) ((value>>16)& 0xFF);src[2] = (byte) ((value>>8)&0xFF);src[3] = (byte) (value & 0xFF);return src;}/*** 将byte数组转换为int数值,降序 ,高位在前,低位在后* @param  byte数组 ,起始位* @return int*/public static int bytesToInt(byte[] src, int offset) {int value;value = (int) ( ((src[offset] & 0xFF)<<24)|((src[offset+1] & 0xFF)<<16)|((src[offset+2] & 0xFF)<<8)|(src[offset+3] & 0xFF));return value;}/***  将int作为字节放入到字节数组中,占一个字节* @param bdata 目标数组* @param index 起始索引* @param value 放入的值,*/public static void setByte(byte[] bdata, int index, int value) {bdata[index] = ((byte) value);}/*** 从字节数组中取对应的字节* @param bdata 目标数组* @param index 目标索引* @return*/public static int getByte(byte[] bdata, int index) {if (index < bdata.length - 1) {return bdata[index] & 0xFF;}return 0;}/***  将int作为short放入到字节数组中,占两个字节* @param bdata 目标数组* @param index 起始索引* @param value 放入的值,*/public static void setShort(byte[] bdata,int index, int value) {bdata[index] = ((byte) (value >> 8 & 0xFF));bdata[(index + 1)] = ((byte) (value & 0xFF));}/*** 从字节数组中取对应的字节* @param bdata 目标数组* @param index 目标索引* @return*/public static int getShort(byte[] bdata, int index) {if (index < bdata.length - 2) {return (getByte(bdata, index) << 8) + getByte(bdata, index + 1);}return 0;}/*** byte数组中取int数值,正序,低位在前,高位在后* @param ary    byte数组* @param offset   从数组的第offset位开始* @return int数值*/public static int getIntOnBytesLH(byte[] ary, int offset) {int value;value = (int) ((ary[offset]&0xFF)| ((ary[offset+1]<<8) & 0xFF00)| ((ary[offset+2]<<16)& 0xFF0000)| ((ary[offset+3]<<24) & 0xFF000000));return value;}/*** byte数组中取int数值,正序,高位在前,低位在后* @param ary    byte数组  * @param offset   从数组的第offset位开始  * @return int数值*/public static int getIntOnBytes(byte[] ary, int offset) {int value;value = (int) (((ary[offset] << 24) & 0xFF000000)| ((ary[offset + 1] << 16) & 0xFF0000)| ((ary[offset + 2] << 8) & 0xFF00) | (ary[offset + 3] & 0xFF));return value;}public static void setIntOnBytes(byte[] ary, int offset,int value){byte[] bytes = intToBytes(value);addBytes(ary, offset, bytes);}public static int getIntFromBytes(byte high_h, byte high_l, byte low_h, byte low_l) {return (high_h & 0xff) << 24 | (high_l & 0xff) << 16 | (low_h & 0xff) << 8 | low_l & 0xff;}

进制转换工具类-JAVA相关推荐

  1. Java 进制转换工具类

    /*** 进制转换工具类* @author dell**/ public class HexadecimalUtil {/*** 获得倒序二进制数据* @param hexString* @retur ...

  2. JAVA 进制转换工具类 10进制转16进制 10进制转2进制 16进制转2进制 16进制10进制 2进制转10进制 2进制转16进制

    进制转换的坑: 注意:使用Integer的方法转换出来的2进制字符串 最高位是没有补零的 ,java的Integer类的toBinaryString()方法转换出来的二进制字符串只会保留最高非零位以后 ...

  3. Java 数据转换/进制转换 工具类

    public class ByteUtil {/*** 十六进制转为十进制*/public static String getHexToTen(String hex) {return String.v ...

  4. java:实现进制转换工具(附完整源码)

    java:实现进制转换工具 package com.xxq;import java.awt.BorderLayout; import java.awt.EventQueue;import javax. ...

  5. java 进制转换工具_进制转换工具(JAVA)

    /**进制转换工具,支持2-36任意进制间相互转换 */ public class HexConverter { public static String Quotient = null; publi ...

  6. Android开发实用小工具十——进制转换工具

    文章目录 前言 一.效果展示 二.代码 1.样式布局 2.主代码 总结 前言 进制转换工具的开发与实现. 一.效果展示 二.代码 准备工作与我开发的另一个小工具(长度转换工具)所用一致,详情请看我上一 ...

  7. ASCII HEX BIN DIG进制转换工具页

    ASCII  HEX BIN DIG进制转换工具页 http://www.ab126.com/goju/1711.html

  8. JavaScript实现在线进制转换工具网站 -toolfk程序员在线工具网

    本文要推荐的[ToolFk]是一款程序员经常使用的线上免费测试工具箱,ToolFk 特色是专注于程序员日常的开发工具,不用安装任何软件,只要把内容贴上按一个执行按钮,就能获取到想要的内容结果.Tool ...

  9. 在线2-36任意进制转换工具

    在线2-36任意进制转换工具 在线2-36任意进制转换工具 本工具支持将数字从在2-36进制中任意进制间相互转换,只支持整数,纯客户端实时计算. https://tooltt.com/hex/

最新文章

  1. 组合模式用于分类设计子叶与枝干时候太好用了
  2. python3练习题:11-20
  3. 预告:DIY光剑第二阶段,大宝剑二号 ——爱与家庭,银色复仇者
  4. iOS学习 NSString常用技巧
  5. 大型互联网架构演变历程-《淘宝技术这10年》
  6. ASP.NET_ASP.NET Cookies
  7. asp.net中通过HyperLinkField传值
  8. 25年面试官首次揭秘——世界500强面试题之微软面试题
  9. 图解密码技术(一)密码
  10. 添加页面报警闪烁效果
  11. 皮影机器人ppt_机器人皮影戏装置的制作方法
  12. python面向对象程序设计董付国ppt_(董付国)Python 学习笔记---Python面向对象程序设计(1)...
  13. 2021-02-05仅供自己参考:多态使用
  14. ADuC7026简单开发过程
  15. 京东数科前端岗位面历
  16. 扯淡搞怪聊天室APP设计
  17. 极简html4网页布局,浅淡极简的网页设计:少即多
  18. 如何阅读数据手册datasheet
  19. 协议篇————7、HTTP协议详解
  20. HumanNeRF:从2D视频提取动态人像,并转换为3D模型

热门文章

  1. drawforeground只有鼠标事件进入才刷新_罗技各系鼠标测评(2020年12月更新)
  2. Leetcode每日一题:182.duplicate-emails(查找重复的电子邮箱)
  3. 面试题简答题——操作系统相关汇总
  4. 吴恩达机器学习作业Python实现(三):多类分类和前馈神经网络
  5. VSCode配置jupyter逐行语句运行python
  6. spring cloud互联网分布式微服务云平台规划分析--spring cloud系统管理平台
  7. 移动端车牌识别(前端识别、后端识别)的区别分析
  8. linux中使用gbd进行单布调试
  9. java mysql 输入数据库_如何用JAVA录入数据到SQL数据库
  10. cp无法创建普通文件权限不够_MAC从管理员变成了普通用户怎么办?