`
357029540
  • 浏览: 735613 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

16进制与字符串的互转及转换为byte数组

    博客分类:
  • JAVA
阅读更多
import java.io.ByteArrayOutputStream;
import java.io.UnsupportedEncodingException;

public class TestToHex {
//switch0:bfaab9d8c1bfb1a8beaf
    private static String hexString = "0123456789ABCDEF";
    public static void main(String[] args) throws UnsupportedEncodingException {
        System.out.println(encode(new String("开关量报警".getBytes("gb2312"),"gb2312")));
        System.out.println(decode("BFAAB9D8C1BFB1A8BEAF"));
    }
    /*
     * 将字符串编码成16进制数字,适用于所有字符(包括中文)
     */
    public static String encode(String str) throws UnsupportedEncodingException {
        // 根据默认编码获取字节数组
        byte[] bytes = str.getBytes("gb2312");
        StringBuilder sb = new StringBuilder(bytes.length * 2);
        // 将字节数组中每个字节拆解成2位16进制整数
        for (int i = 0; i < bytes.length; i++) {
            sb.append(hexString.charAt((bytes[i] & 0xf0) >> 4));
            sb.append(hexString.charAt((bytes[i] & 0x0f) >> 0));
        }
        return sb.toString();
    }

    /*
     * 将16进制数字解码成字符串,适用于所有字符(包括中文)
     */
    public static String decode(String bytes) throws UnsupportedEncodingException {
        ByteArrayOutputStream baos = new ByteArrayOutputStream(bytes.length() / 2);
        // 将每2位16进制整数组装成一个字节
        for (int i = 0; i < bytes.length(); i += 2)
            baos.write((hexString.indexOf(bytes.charAt(i)) << 4 | hexString
                    .indexOf(bytes.charAt(i + 1))));
        return new String (new String(baos.toByteArray(),"gb2312").getBytes("utf-8"),"utf-8");
    }

        /*
	 * 将16进制的字符串装换为对应的byte数组,例如"A5000C5A81000000000000000000010E90AA" 转换为对应的数组形式
	 * 
	 * @param hexString
	 * @return 转换后的数组
	 */
	public byte[] hexStringToBytes(String hexString) {
		if (StringUtils.isEmpty(hexString)) {
			return null;
		}
		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;
	}

	private byte charToByte(char c) {
		return (byte) "0123456789ABCDEF".indexOf(c);
	}
}

 

分享到:
评论

相关推荐

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

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

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

    反之,从十六进制字符串转换回字节数组的过程也相对简单: ```csharp public static byte[] HexStringToByteArray(string hex) { int length = hex.Length / 2; byte[] bytes = new byte[length]; for (int i = 0...

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

    在描述中提到的博文链接虽然无法直接访问,但根据标题,我们可以推测博主可能分享了一种将十六进制字符串转换为字节数组的方法。通常,这种转换过程包括以下步骤: 1. **预处理**:检查输入的十六进制字符串是否...

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

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

    java工具类 string转10进制sacii byte数组再转16进制字符数组再转16进制byte数组 string与BCD互转

    java工具类 : string转10进制sacii byte数组、 10进制sacii byte数组转16进制字符数组、 16进制字符数组转16进制byte数组、 string与BCD互转等方法,包含多个转换方法, 足够满足日常解包组包需求

    Delphi字符串16进制互相转换

    在Delphi中,16进制字符串转换为整数或字节数组,以及将整数或字节数组转换为16进制字符串,有多种方法。我们可以使用系统提供的函数,如`Hex`和`IntToHex`来进行转换。 1. **16进制字符串转整数**: - 使用`...

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

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

    十六进制与字符串转换

    这个示例展示了如何使用`sprintf`将一个字节转换为十六进制字符串,以及如何使用`strtol`将一个十六进制字符串转换回字节。 在实际应用中,你可能会遇到更复杂的情况,比如处理包含多个字节的数组或者字符串,这时...

    Java中3DES加密解密示例(封装byte数组16进制互转)

    在 hex2Byte 方法中,我们将 16 进制字符串转换回 byte 数组。我们使用 Integer.decode 方法来将 16 进制字符串转换回 byte 数组中的每个元素。 示例代码 在本示例中,我们提供了一个示例代码,展示如何使用 3DES ...

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

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

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

    此函数用于将一个十六进制字符串转换为字节数组。该函数首先会移除输入字符串中的所有非十六进制字符,然后检查字符串长度是否为偶数,如果不是,则在末尾添加一个空字符以保证转换正确进行。接着,通过循环遍历字符...

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

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

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

    但是,如果我们需要将十六进制字符串转换为Byte数组时,我们需要使用Convert类的ToByte方法,如下所示: ```csharp byte[] bytes = new byte[str.Length / 2]; for (int i = 0; i ; i++) { bytes[i] = Convert.To...

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

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

    android字符串和16进制转换

    反过来,将16进制字符串转换回ASCII字符串,我们需要将16进制字符串分割成单个字符,然后将它们解析为整数,最后将这些整数转换回相应的字符。这里有一个示例: ```java public String hexToString(String hex) { ...

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

    - `HexString2Bytes`方法实现了将16进制字符串转换为字节数组。它首先创建一个目标数组,然后遍历输入字符串的每个字符对,将每两个字符视为一个16进制数字,通过`uniteBytes`方法合并成一个字节并存入数组。`...

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

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

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

    要将字符串转换为十六进制串,我们需要对字符串中的每个字符进行编码,然后将编码结果转换成十六进制字符串。C#提供了`BitConverter`类和`ToString`方法来完成这个任务: ```csharp public static string StringTo...

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

    一、从十六进制字符串转换为二进制数据 在 Lua 中,可以使用 string.len 函数来获取十六进制字符串的长度,然后使用 for 循环来遍历整个字符串,使用 string.sub 函数来截取每两个字符,使用 tonumber 函数将其转换...

Global site tag (gtag.js) - Google Analytics