【问题标题】:how to send hexadecimal value in java to RS232 Serial port如何将Java中的十六进制值发送到RS232串口
【发布时间】:2017-10-19 09:02:21
【问题描述】:

我需要向我的微控制器发送一些命令。 我正在使用 RXTX 库。我可以连接到我的微控制器,但我无法将我的命令转换为正确的字节。

示例: 我想发送 0x80 十六进制值。

如果我将 128 个整数 (0x80) 转换为字节

   byte a = (byte) 128;

我收到-128

java字节的范围是-128 - 127

但我需要发送 128 作为命令。如何转换?

我还有其他命令要发送。

80
20 F2 40 F8 3F 
FA 21 40 

其中一个是 40 位。

我写入可以接受byte[]int 的输出流。

...
  static OutputStream out;
out.write(byte[]);
out.write(int); 
..

但是 int 超出了 40 位的范围。如何将 40 位整数解析为字节?

This Question helped me

【问题讨论】:

    标签: java binary serial-port byte twos-complement


    【解决方案1】:

    0x80 仍然是 0x80,无论 Java 的有符号字节类型系统显示为什么。

    发送即可。

    【讨论】:

    • 嗯好的。我的微控制器没有响应我的命令,我想也许这就是问题所在:S
    【解决方案2】:

    我很久以前就使用过 RXTX 库,我认为这并不重要。只需发送 string.getBytes()

    【讨论】:

    • 我不想发送字符串的字节表示
    【解决方案3】:

    你可以使用

    Byte.parseByte("a", 16);
    

    但这仅适用于高达 127 的值,高于需要转换为字节的值,由于有符号/无符号问题,因此我建议将其传输为 int,然后将其转换为字节

    (byte) (Integer.parseInt("ef",16) & 0xff);
    

    【讨论】:

    • 字节 c =(byte) (Integer.parseInt("128",16) & 0xff);给我 40 作为输出
    • 您应该传递十六进制值。 80
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    • 2015-07-25
    • 2013-08-08
    • 2016-03-21
    • 2019-02-21
    相关资源
    最近更新 更多