`

在Java中字节与十六进制的相互转换主要思想有两点

    博客分类:
  • java
阅读更多
在Java中字节与十六进制的相互转换主要思想有两点:

1、二进制字节转十六进制时,将字节高位与0xF0做"&"操作,然后再左移4位,得到字节高位的十六进制A;将字节低位与0x0F做"&"操作,得到低位的十六进制B,将两个十六进制数拼装到一块AB就是该字节的十六进制表示。
2、十六进制转二进制字节时,将十六进制字符对应的十进制数字右移动4为,得到字节高位A;将字节低位的十六进制字符对应的十进制数字B与A做"|"运算,即可得到十六进制的二进制字节表示

我测试的Java代码如下:

Java代码 复制代码 收藏代码
  1. public class Test01 {   
  2.        
  3.     private static String hexStr =  "0123456789ABCDEF";   
  4.            
  5.     public static void main(String[] args)    
  6.     {   
  7.         String str = "二进制与十六进制互转测试";   
  8.            
  9.         String hexString = BinaryToHexString(str.getBytes());   
  10.         System.out.println("str转换为十六进制:\n"+hexString);   
  11.            
  12.         System.out.println("将str的十六进制文件转换为二进制并转为String:\n"+new String(HexStringToBinary(hexString)));   
  13.        
  14.     }   
  15.     /**  
  16.      *   
  17.      * @param bytes  
  18.      * @return 将二进制转换为十六进制字符输出  
  19.      */  
  20.     public static String BinaryToHexString(byte[] bytes){   
  21.            
  22.         String result = "";   
  23.         String hex = "";   
  24.         for(int i=0;i<bytes.length;i++){   
  25.             //字节高4位   
  26.             hex = String.valueOf(hexStr.charAt((bytes[i]&0xF0)>>4));   
  27.             //字节低4位   
  28.             hex += String.valueOf(hexStr.charAt(bytes[i]&0x0F));   
  29.             result +=hex;   
  30.         }   
  31.         return result;   
  32.     }   
  33.     /**  
  34.      *   
  35.      * @param hexString  
  36.      * @return 将十六进制转换为字节数组  
  37.      */  
  38.     public static byte[] HexStringToBinary(String hexString){   
  39.         //hexString的长度对2取整,作为bytes的长度   
  40.         int len = hexString.length()/2;   
  41.         byte[] bytes = new byte[len];   
  42.         byte high = 0;//字节高四位   
  43.         byte low = 0;//字节低四位   
  44.   
  45.         for(int i=0;i<len;i++){   
  46.              //右移四位得到高位   
  47.              high = (byte)((hexStr.indexOf(hexString.charAt(2*i)))<<4);   
  48.              low = (byte)hexStr.indexOf(hexString.charAt(2*i+1));   
  49.              bytes[i] = (byte) (high|low);//高地位做或运算   
  50.         }   
  51.         return bytes;   
  52.     }   
  53. }  
public class Test01 {
	
	private static String hexStr =  "0123456789ABCDEF";
		
	public static void main(String[] args) 
	{
		String str = "二进制与十六进制互转测试";
		
		String hexString = BinaryToHexString(str.getBytes());
		System.out.println("str转换为十六进制:\n"+hexString);
		
		System.out.println("将str的十六进制文件转换为二进制并转为String:\n"+new String(HexStringToBinary(hexString)));
	
	}
	/**
	 * 
	 * @param bytes
	 * @return 将二进制转换为十六进制字符输出
	 */
	public static String BinaryToHexString(byte[] bytes){
		
		String result = "";
		String hex = "";
		for(int i=0;i<bytes.length;i++){
			//字节高4位
			hex = String.valueOf(hexStr.charAt((bytes[i]&0xF0)>>4));
			//字节低4位
			hex += String.valueOf(hexStr.charAt(bytes[i]&0x0F));
			result +=hex;
		}
		return result;
	}
	/**
	 * 
	 * @param hexString
	 * @return 将十六进制转换为字节数组
	 */
	public static byte[] HexStringToBinary(String hexString){
		//hexString的长度对2取整,作为bytes的长度
		int len = hexString.length()/2;
		byte[] bytes = new byte[len];
		byte high = 0;//字节高四位
		byte low = 0;//字节低四位

		for(int i=0;i<len;i++){
			 //右移四位得到高位
			 high = (byte)((hexStr.indexOf(hexString.charAt(2*i)))<<4);
			 low = (byte)hexStr.indexOf(hexString.charAt(2*i+1));
			 bytes[i] = (byte) (high|low);//高地位做或运算
		}
		return bytes;
	}
}

运行后的输出结果如下:

str转换为十六进制:

B6FEBDF8D6C6D3EBCAAEC1F9BDF8D6C6BBA5D7AAB2E2CAD4

将str的十六进制文件转换为二进制并转为String:

二进制与十六进制互转测试
分享到:
评论
1 楼 hl174 2015-12-25  
写的不错,赞一个

相关推荐

    java实现十六进制字符unicode与中英文转换示例

    在Java编程语言中,处理Unicode编码和十六进制字符转换是一项常见的任务,特别是在处理文本数据时。本示例探讨了如何使用Java实现从Unicode十六进制字符串到中英文字符的转换,以及反过来的过程。理解Unicode和UTF...

    android byte字节数组转换十六进制字符串

    在Android开发中,有时我们需要将字节数组(byte array)转换为十六进制字符串,以便于数据存储、传输或调试。这是因为字节数组是二进制数据,而十六进制字符串则是一种人类可读的表示方式。下面我们将详细讨论如何...

    十进制转十六进制包含大小端设置_大小端_matlab_十进制_十六进制_

    在计算机科学中,数据在内存中的存储方式有两种主要格式,即大端模式(Big-Endian)和小端模式(Little-Endian)。这两种模式涉及到多字节数据如何在字节序列中排列,对于理解和处理二进制数据至关重要。本文将详细...

    汉字十六进制和二进制转换

    字符串到十六进制转换方法:`BinaryToHexString` 该方法接收一个字节数组作为参数,并返回对应的十六进制字符串表示。具体步骤如下: 1. **初始化十六进制字符串**:`private static String hexStr = "0123456789...

    16进制数据转换

    ### IT知识点:Java中16进制数据与字符串(含中文)的相互转换 #### 核心概念 在计算机科学中,十六进制(Hexadecimal)是一种常用的数值表示方法,通常用于表示二进制数据,因为十六进制的每一位可以表示四位二...

    十六进制与ASC码转换 程序

    在IT领域,十六进制(Hexadecimal)和ASCII码(American Standard Code for Information Interchange)是两种常见的数据表示方式,它们在计算机科学中扮演着重要角色。本程序提供了从十六进制到ASCII码以及从ASCII码...

    十六进制和汉字互转代码

    根据给定的文件信息,本文将详细介绍如何使用Java编程语言实现十六进制与汉字之间的转换。此技术在处理编码、网络安全、数据交换等场景中有着广泛的应用。 ### 一、十六进制与汉字转换的基本原理 #### 1.1 十六...

    将传进来的十六进制表示的字符串转换成byte数组 文件下载

    例如,在Java生态系统中,Apache Commons Lang库的`Hex`类就提供了丰富的十六进制与字节转换功能。 最后,文件名“lib”可能指的是一个库或者是一系列库文件,这些库可能包含了用于处理这类转换的函数或类。在不同...

    VB汉字与十六进制互转.zip

    本压缩包"VB汉字与十六进制互转.zip"提供了关于汉字与十六进制转换的源码,这在处理汉字编码、数据存储或网络传输时是非常实用的。以下将详细解析这个主题及其相关知识点。 首先,我们需要理解汉字在计算机中的表示...

    Android字符串和十六进制相互转化出现的中文乱码问题

    这是因为中文字符在计算机内部是以多字节的形式存储的,而直接进行十六进制转换时,如果不正确地处理字节序列,就可能导致乱码的出现。 本文主要探讨如何在Android环境下正确实现字符串和十六进制之间的转换,同时...

    JAVA_MAC地址校验和转换

    - **二进制与十六进制转换**:可以使用`Integer.parseInt()`或`Long.parseLong()`方法配合`format()`函数将16进制字符串转换为二进制,反之亦然。 - **字符串与字节数组转换**:`getBytes("UTF-8")`可以将字符串...

    进制转换.zip

    进制转换在计算机网络中也扮演着重要角色,如IP地址的表示(通常使用点分十进制表示,但实际上是个32位二进制数),MAC地址(通常用冒号分隔的十六进制表示)以及URL编码(使用百分号%后跟两位十六进制数来表示非...

    JAVA算法大全PDF文档

    上述代码片段展示了在Java中如何处理十六进制与字符串之间的转换,如何合并与拆分字节,以及如何计算CRC16校验码。这些都是在处理网络通信、文件操作等场景时非常实用的算法和技术点。通过理解和掌握这些知识,可以...

    java 中文Unicode转换

    将中文字符转换为Unicode编码,可以使用`Character`类的`toChars()`方法,或者直接通过字符串的`codePointAt()`方法获取码点,然后以"\u"开头的十六进制格式表示。例如: ```java String chineseStr = "你好"; for ...

    java练习题 试卷

    9. 十六进制与十进制:C在十六进制中代表12。 10. 定点设备:显示屏是固定在某个位置的显示设备。 11. 局域网连接设备:网卡是计算机接入局域网的必要硬件。 12. 常用通信设备:DSL和ADSL是两种数字用户线路技术...

    中文转utf8

    #### 三、十六进制转换 在计算机科学中,十六进制(Hexadecimal)是一种常用于表示数字的进位制系统,基数为16。通常用A-F代表十进制中的10-15。十六进制在处理二进制数据时非常方便,因为每四位二进制可以转换成一...

    C#加密 解密对接java 的加密AES/CBC/PKCS7Padding 转16进制.rar

    本主题主要探讨的是如何使用C#实现加密和解密操作,以便与Java应用程序进行无缝对接,特别是使用AES/CBC/PKCS7Padding算法,并将结果转换为16进制表示。下面将详细阐述相关知识点。 **AES(Advanced Encryption ...

    radix:各种进制之间的转换,基本数据类型转换成字节,对象与字节间的转换,对象转换成字节存入文件,从字节文件中读取文件并转换成对象

    在Java编程语言中,数据类型转换和进制转换是日常开发中的常见操作。本文将深入探讨标题和描述中提到的几个关键知识点:各种进制之间的转换、基本数据类型与字节的转换、对象与字节之间的转换、以及如何将字节序列...

    计算机应用基础习题集.pdf

    17. **八进制与十六进制转换**:八进制数305转换为十六进制,先转换为十进制再转十六进制,为C5。 18. **十进制与二进制浮点数**:十进制数20.8125转换为二进制,需要考虑整数部分和小数部分。 19. **十进制与八...

Global site tag (gtag.js) - Google Analytics