(Java)将十六进制字符串转换为字节数组后的问题

我正在尝试将十六进制字符串0280000000288B41等转换为0x02、0x80、0x00,..,0x8B,0x41到byte []数组,并将其发送到与笔记本电脑相连的设备。

我正在使用2种方法进行转换。首先是我在这里找到的这种方法:

public static byte[] hexStringToByteArray(String hex) {
        int l = hex.length();
        byte[] data = new byte[l/2];
        for (int i = 0; i < l; i += 2) {
            data[i/2] = (byte) ((Character.digit(hex.charAt(i),16) << 4)
                    + Character.digit(hex.charAt(i+1),16));
        }
        return data;
    }

第二,通过使用DatatypeConverter

    public static byte[] toByteArray(String s) {
        return DatatypeConverter.parseHexBinary(s);
    }

我有2个相似的结果

index: 0 value: 2
index: 1 value: -128
index: 2 value: 0
index: 3 value: 0
index: 4 value: 0
index: 5 value: 40
index: 6 value: -117
index: 7 value: 65

等效于:

2,-128,40,-117,65

现在,我有两个问题。很抱歉,我仍在学习编程。

我了解十六进制,十进制,ASCII字符等都是我们程序员的表示形式,当我执行代码时,它将所有这些表示形式转换为二进制形式并将消息发送到笔记本电脑上连接的设备(我的通讯端口)都可以)。我应该得到回应,尽管我这样做了,但事实并非如此(该设备发出蜂鸣声,但显示屏应该显示某些东西,但没有)。

我想知道我的代码是否有问题,通过十六进制值发送消息?

此外,为什么第二个索引出现负号? (-128)?这是否意味着十六进制值80表示字节(数据类型)为-128?

最后,我的字节数组中的所有这些字节值都将自动以二进制格式转换(除了现在不执行任何操作,我什么都不做)到设备,对吧?

非常感谢您:)

lsy94522 回答:(Java)将十六进制字符串转换为字节数组后的问题

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3068904.html

大家都在问