`

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

    博客分类:
  • Java
阅读更多

方式一:

/** 
	 * Convert hex string to byte[] 
	 * @param hexString the hex string 
	 * @return byte[] 
	 */  
	public static byte[] hexStringToBytes(String hexString) {  
	    if (hexString == null || hexString.equals("")) {  
	        return null;  
	    }  
 if(hexString.length()%2!=0){  
            throw new RuntimeException("Hex  bit string length must be even");  
        } 
	    hexString = hexString.toUpperCase();  
	    int length = hexString.length() / 2;  
	    char[] hexChars = hexString.toCharArray();  
	    byte[] d = new byte[length];  
	    for (int i = 0; i < length; i++) {  
	        int pos = i * 2;  
	        d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));  
	    }  
	    return d;  
	}  
/**
	 * Convert char to byte
	 * 'F'-->15
	 * @param c
	 *            char
	 * @return byte
	 */
	private static byte charToByte(char c) {
		int index = "0123456789ABCDEF".indexOf(c);
		if (index == -1) {
			index = "0123456789abcdef".indexOf(c);
		}
		return (byte) index;
	}

 

方式二:

// 从十六进制字符串到字节数组转换
	 public static byte[] hexString2Bytes(String hexstr) {
		int length=hexstr.length();
		if(length%2!=0){
			throw new RuntimeException("Hex  bit string length must be even");
		}
		byte[] b = new byte[hexstr.length() / 2];
		int j = 0;
		for (int i = 0; i < b.length; i++) {
			char c0 = hexstr.charAt(j++);
			char c1 = hexstr.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;
	  }

 

 注意:当十六进制位串转化为字节数组时,十六进制位串的位数必须是偶数的,因为两个十六进制位串对应一个字节

 

分享到:
评论

相关推荐

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

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

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

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

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

    为了将一个字符串转换为十六进制表示,可以先将其编码为字节数组,再将每个字节转换为十六进制形式: ```csharp public static string StringToHexString(string str, Encoding encoding) { byte[] bytes = ...

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

    - **手动转换**:通过遍历16进制字符串,将每个两位16进制数转换为10进制,然后存储到byte数组中。这种方法需要对二进制、16进制和10进制的转换规则有深入理解。 3. **代码实现** 使用`hex`包进行转换的简单示例...

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

    本篇将详细阐述如何在Java中进行二进制、十进制和十六进制之间的转换,以及字节数组与十六进制字符串的相互转换。 一、进制转换 1. **二进制转十进制**:Java中可以使用`Integer.parseInt()`或`Long.parseLong()`...

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

    总结来说,将十六进制字符串转换为byte数组是编程中常见的操作,涉及到的主要知识点包括字符串处理、二进制数据操作以及对不同编程语言的API理解。在实际应用中,我们需要根据具体需求选择合适的方法和工具,以确保...

    十六进制字符串按位异或运算工具和java位异或运算

    当两个十六进制字符串进行按位异或运算时,会先将它们转换为二进制形式,然后逐位进行异或操作。异或运算是对两个位进行比较,如果两个位相同,则结果为0;如果两个位不同,则结果为1。 在Java中,我们可以利用`...

    byte、十进制、十六进制间的转换

    byte数组、十进制、十六进制间的两两转换

    十六进制与字符串转换

    - 手动解析:遍历字符串中的每个字符,将其视为两位的十六进制数,并转换为对应的十进制值。例如,`'A'`在ASCII码中是65,其对应的十六进制值是41。这需要对字符的ASCII码值和十六进制数有深入的理解。 - 使用`...

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

    -- 转换十六进制字符串为二进制数据 for i = 1, string.len(hexstr) - 1, 2 do local doublebytestr = string.sub(hexstr, i, i+1) local n = tonumber(doublebytestr, 16) if 0 == n then bytesfile:write('\00...

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

    - `bytesToHexString()`方法遍历字节数组,将每个字节转换为十六进制字符串,并确保结果始终为两位。 3. **BCD编码** - BCD编码是一种特殊形式的二进制编码,用于表示十进制数。每个十进制数字用四位二进制表示,...

    字符串之间的转化通用原创

    字符串之间的转化通用,字节数组转化为十六进制字符串,16进制转化为byte数组,十六进制字符串转字符串,将一条十六进制字符串转换为ASCII

    十六进制字符串和数值相互转换

    如果你需要处理的是二进制数据,例如字节数组,并且想要将其转换为十六进制字符串,你可以遍历数组并将每个字节转换为两位的十六进制字符串,然后连接起来。同样,要将这样的字符串解析回字节数组,你需要对每个两位...

    C# 字符串转十六进制串,16进制反向转回原字符串

    在这里,我们使用`Substring`方法提取每两个字符形成一个字节的十六进制值,然后用`Convert.ToByte`将其转换为字节,最后通过`Encoding.Unicode.GetString`将字节数组解码为字符串。 注意,由于Unicode编码中每个...

    C#byte[]与汉字、16进制字符的转换[文].pdf

    在上面的代码中,我们首先将十六进制字符串str转换为Byte数组bytes,然后使用Substring方法将十六进制字符串分割成小块,并将每个小块转换为Byte类型。 反之,如果我们需要将Byte数组转换为十六进制字符串时,我们...

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

    /** * 16进制表示的字符串转换为字节数组 * @param hexString 16进制表示的字符串 * @return byte[] 字节数组 */ public static byte[] hexStringToByteArray(String hexString) { hexString = hexString.replaceAll...

    c#,十六进制转换成浮点数

    2. **字符串到整型转换**:将十六进制字符串转换为十进制整数。可以使用`int.Parse`或`Convert.ToInt32`方法,但需先添加前缀“0x”以指示基数是16。 3. **整型到浮点数转换**:这一步比较复杂,因为浮点数的二进制...

    C#实现十六进制AES的加解密,字节数组工具类

    在C#中,可以使用BitConverter类将字节数组转换为十六进制字符串,反之亦然。 总结来说,C#实现的十六进制AES加解密结合了强大的加密算法和方便的数据表示方式,提供了可靠的数据安全解决方案。`ByteUtil.cs`和`...

Global site tag (gtag.js) - Google Analytics