`
happyqing
  • 浏览: 3225161 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java字节数组byte[],16进制字符串互转,

    博客分类:
  • java
阅读更多

 

commons-codec-*.jar里有通用方法

Hex.encodeHex(byte[]) 字节数组转换成16进制字符串 (可转成大写的)

Hex.decodeHex(char[]) 16进制“字符串”转换成字节数组 (支持大写的)

 

下面的两个是自定义写法,建议用通用方法。

import org.apache.commons.codec.DecoderException;
import org.apache.commons.codec.binary.Hex;

/**
 * 字符串工具类
 * @author happyqing
 * @since 2013.11.6
 */
public class StringUtil {
	
	/**
	 * 字节数组转换成16进制字符串
	 * @param bytes 字节数组
	 * @return 16进制字符串
	 */
	public static String hexEncode(byte[] bytes) {
		if (bytes == null || bytes.length <= 0) {
			return null;
		}
		return new String(Hex.encodeHex(bytes)); //Hex.encodeHex(bytes, false)
	}

	/**
	 * 16进制字符串转换成字节数组
	 * @param hexStr 16进制字符串
	 * @return 字节数组
	 */
	public static byte[] hexDecode(String hexStr) {
		if (hexStr == null || "".equals(hexStr)) {
			return null;
		}
		try {
			char[] cs = hexStr.toCharArray();
			return Hex.decodeHex(cs);
		} catch (DecoderException e) {
			e.printStackTrace();
		}
		return null;
	}
	
	/**
	 * 字节数组转为16进制字符串
	 * @param bytes 字节数组
	 * @return 16进制字符串
	 */
	public static String byteArray2HexString(byte[] bytes) {
		if (bytes == null || bytes.length <= 0) {
			return null;
		}
		//先把byte[] 转换维char[],再把char[]转换为字符串
		char[] chars = new char[bytes.length * 2]; // 每个byte对应两个字符
		final char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
		for (int i = 0, j = 0; i < bytes.length; i++) {
			chars[j++] = hexDigits[bytes[i] >> 4 & 0x0f]; // 先存byte的高4位
			chars[j++] = hexDigits[bytes[i] & 0x0f]; // 再存byte的低4位
		}

		return new String(chars);
	}

	/**
	 * 16进制字符串转字节数组
	 * @param hexString 16进制字符串
	 * @return 字节数组
	 */
	public static byte[] hexString2ByteArray(String hexString) {
		if (hexString == null || "".equals(hexString)) {
			return null;
		}
		//先把字符串转换为char[],再转换为byte[]
		int length = hexString.length() / 2;
		char[] hexChars = hexString.toCharArray();
		byte[] bytes = new byte[length];
		String hexDigits = "0123456789abcdef";
		for (int i = 0; i < length; i++) {
			int pos = i * 2; // 两个字符对应一个byte
			int h = hexDigits.indexOf(hexChars[pos]) << 4; // 注1
			int l = hexDigits.indexOf(hexChars[pos + 1]); // 注2
			if (h == -1 || l == -1) { // 非16进制字符
				return null;
			}
			bytes[i] = (byte) (h | l);
		}
		return bytes;
	}
	
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		 //String str = "15811111111";
		 String str = "字节数组转16进制字符串";
		 String result = null;
		 byte[] bytes = null;
		 long b = System.currentTimeMillis();
		 for(int i=0; i<10000; i++){
			 //result = byteArray2HexString(str.getBytes()); //27
			 result = hexEncode(str.getBytes());	//32
		 }
		 System.out.println("耗时:"+(System.currentTimeMillis()-b));
		 
		 System.out.println("result:"+result);
		 long b2 = System.currentTimeMillis();
		 for(int i=0; i<10000; i++){
			 //bytes = hexString2ByteArray(result); //32
			 bytes = hexDecode(result); //16
		 }
		 System.out.println("耗时:"+(System.currentTimeMillis()-b2));
		 System.out.println("result:"+new String(bytes));
	}

}

 

分享到:
评论

相关推荐

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

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

    16进制与字符串、字节数组之间的转换

    相反地,要从十六进制字符串还原回原始字符串,需要将十六进制字符串拆分为字节数组,然后解码为字符串: ```csharp public static string HexStringToString(string hex, Encoding encoding) { int length = hex....

    java 字符串转16进制 16进制转字符串 将两个ASCII字符合成一个字节;

    java 字符串转16进制 16进制转字符串 将两个ASCII字符合成一个字节; java 字符串转16进制 16进制转字符串 将两个ASCII字符合成一个字节; java 字符串转16进制 16进制转字符串 将两个ASCII字符合成一个字节; java ...

    Go-此工具用于将16进制字符串转换成10进制byte数组

    本工具专注于将16进制字符串转换为10进制的byte数组,这在处理如数据库存储、加密解密、网络通信等场景中非常常见。 1. **16进制字符串与10进制byte数组的概念** - **16进制字符串**:由0-9和A-F(或a-f)字符组成...

    PHP CRC8算法-集成十六进制转byte数组与byte数组转十六进制

    由C代码翻译过来的PHP CRC8算法,内有十六进制转字节数组与字节数组转十六进制,内有十六进制转byte数组与byte数组转十六进制

    JAVA二进制字节数组字符十六进制BCD编码转换.doc

    - 示例中的`hexStringToByte()`方法将十六进制字符串转换为字节数组,而`bytesToHexString()`则将字节数组转换为十六进制字符串。 2. **字节数组** - 字节数组在Java中用`byte[]`表示,它可以存储任意字节值,常...

    java中进制转换(二进制,十进制,十六进制)及字节数组与十六进制的转换

    1. **字节数组转十六进制字符串**:可以使用自定义方法或者`HexUtils`类(参考你的文件名)。例如: ```java byte[] bytes = {1, 2, 3}; String hexString = toHexString(bytes); public static String toHexString...

    把十六进制的位串转化为byte数组

    在处理十六进制字符串转字节数组时,还需要注意大小端的问题。在某些系统中,数据的存储顺序有大端(高位字节在前)和小端(低位字节在前)之分,这在处理网络传输或者跨平台的数据交换时尤为重要。 总之,将十六...

    java16进制与字符串的转换.pdf

    在 Java 中,我们可以使用 `Bytes2HexString` 函数将 byte 数组转换为 16 进制字符串。该函数接受一个参数 b,即 byte 数组,然后将其转换为 16 进制字符串。 ```java public static String Bytes2HexString(byte[]...

    labview 4字节一维数组整数转为4字节16进制字符串.vi

    labview 读取的一维数组(整数)转换成16进制的字符串,方便大家进行数据处理。有问题可以留言咨询,互相学习

    java 16进制表示的字符串转换为字节数组 工具类

    /** * 16进制表示的字符串转换为字节数组 * @param hexString 16进制表示的字符串 *... i += 2) { // 两位一组,表示一个字节,把这样表示的16进制字符串,还原成一个字节 bytes[i / 2] = (byte) ((Character.digit(hexS

    Delphi字符串16进制互相转换

    4. **字节数组转16进制字符串**: - 可以通过循环遍历数组,对每个字节使用`Format('%02X', [byte])`生成16进制字符串,并连接起来。 5. **串口和SOCKET通讯中的16进制处理**: - 在串口(RS232/RS485)通讯中,...

    Lua小程序十六进制字符串和二进制数据间的转换[借鉴].pdf

    在上面的代码中,我们首先打开了二进制数据文件,读取了文件的内容,然后使用 for 循环来遍历整个数据,每次将每个字节转换为十六进制字符串,最后将所有十六进制字符串连接起来。 本文展示了如何使用 Lua 实现十六...

    C#16进制与字符串字节数组之间的转换代码

    字节数组转十六进制字符串(`byteToHexStr`) 此函数用于将字节数组转换为十六进制字符串。它遍历每个字节,将其转换为十六进制表示形式,并拼接成一个新的字符串返回。 ```csharp public static string ...

    java二进制,字节数组,字符,十六进制,BCD编码转换

    /* java二进制,字节数组,字符,十六进制,BCD编码转换2007-06-07 00:17/** *//** * 把16进制字符串转换成字节数组 * @param hex * @return */

    C#string转byte(16进制)代码.txt

    输入string 输出byte 16进制下的转换

    java16进制与字符串的转换借鉴.pdf

    2. **字节数组转16进制字符串**: - `Bytes2HexString`方法用于将字节数组转换为16进制字符串。它遍历输入的字节数组,将每个字节与0xFF进行位与操作以确保只取低8位,然后使用`Integer.toHexString()`将结果转换为...

    java String 与各种进制字符之间的转换

    - `Integer.toHexString()`和`Integer.parseInt(hexStr, 16)`是十六进制字符串与整数之间转换的常用方法。 4. **字符编码与解码**: Java中的`Character`类提供了处理单个字符的方法。例如,可以使用`Character....

    易语言字节集转换16进制文本

    易语言提供了相应的内置函数,如“字节转十六进制”(ByteToHex),可以将单个字节转换为16进制字符串。如果要处理整个字节集,就需要循环执行此过程,并将结果连接起来。 4. **字符串连接**:在转换过程中,会生成...

Global site tag (gtag.js) - Google Analytics