java怎么将长度为2位的16进制格式的字符串转成一个字节(byte)?

发布于 2022-09-12 23:37:28 字数 1073 浏览 25 评论 0

以下是是java代码,第一个方法转换的结果有问题

    public static byte stringTobyte(String hex) {
        char[] hexChars = hex.toCharArray();
        byte b=(byte) (charToByte(hexChars[0]) << 4 | charToByte(hexChars[1]));
        return b;
    }
    
    public static byte[] hexStringToBytes(String hexString) {
        hexString = hexString.toLowerCase();
        String[] hexStrings = hexString.split(" ");
        byte[] bytes = new byte[hexStrings.length];
        for (int i = 0; i < hexStrings.length; i++) {
            char[] hexChars = hexStrings[i].toCharArray();
            bytes[i] = (byte) (charToByte(hexChars[0]) << 4 | charToByte(hexChars[1]));
        }
        return bytes;
    }

第一个方法是把长度为2位的16进制格式的字符串转换为字节,第二个是把一个分隔符为空格的多个2位长度的16进制字符串转换为字节数组

第二个方法是从网上找的,第一个方法是从第二个方法的for循环代码里抠出来改的。

但第一个方法测试使用有问题,第二个方法测试没有问题,

第一个方法,只要出现了字母,调用后转换的byte输出出来的全是-1,在转成16进制的字符串,就变成了FF,例如输入0A,0B,AA ,AB等,转换后的byte值是-1,转回16进制字符串会变成FF

第二个方法就没有这种问题,例如输入"0A 0B AA AB",转成字节数组,在转回来,还是"0A 0B AA AB"

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

时光清浅 2022-09-19 23:37:28

参考

// string 长度必须为偶数
public static byte[] hexStringToByteArray(String s) {
    int len = s.length();
    byte[] data = new byte[len / 2];
    for (int i = 0; i < len; i += 2) {
        data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
                             + Character.digit(s.charAt(i+1), 16));
    }
    return data;
}
九局 2022-09-19 23:37:28

commons-codec工具里面有个Hex

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文