java - 从串口读取double

标签 java serial-port double

我正在尝试从串行端口读取 double 值。 我可以在 String 中读取它,但是当我将 String 解析为 Double 时,结果没有任何意义,并且与 String 不一样。

这是我的代码:

public void serialEvent(SerialPortEvent event){
        switch(event.getEventType()) {

            case SerialPortEvent.DATA_AVAILABLE:
                byte[] readBuffer = new byte[8];
                try {
                    while (inputStream.available()>0) {
                     int numBytes = inputStream.read(readBuffer);
                     String peso = new String (readBuffer, 0, numBytes, "UTF-8");
                     System.out.print(new String (readBuffer, 0, numBytes, "UTF-8"));
                    //double d = ByteBuffer.wrap(readBuffer).order(ByteOrder.LITTLE_ENDIAN ).getDouble();
                    //System.out.print(d);
                     m_dWeightBuffer = Double.parseDouble(peso);
                     System.out.print(m_dWeightBuffer);
                     }
                     //System.out.print(new String (readBuffer, 0, numBytes, "UTF-8"));
                    } catch (IOException ex) {}
                break;

        } 
    }

但是现在,您知道如何将此字符串转换为 Double 吗?

System.out.print(new String (readBuffer, 0, numBytes, "UTF-8")); 输出:000.250

m_dWeightBuffer = Double.parseDouble(peso); System.out.print(m_dWeightBuffer); 输出:0.00.0250.0不好

System.out.println(new String (readBuffer, 0, numBytes, "UTF-8")); 输出:

0 0 0 .250

最佳答案

前言

看来服务器正在串行端口上以 4 个 block 写入,可能是 64 位字:

  1. 0
  2. 0
  3. 0
  4. .250

您正在使用 64 位的最大缓冲区进行读取(readBuffer.length * 8 位),因此最后一个可能是:

0011111111010000000000000000000000000000000000000000000000000000

尝试一下:

        String s = "0011111111010000000000000000000000000000000000000000000000000000"; 
        double d = Double.longBitsToDouble(Long.parseLong(s,2));
        System.out.println(d); //-> 0.25

目前没有什么问题

回答

您可能希望在一个点中处理所有 4 个 block ,因此您可以尝试以下操作 - 当然,这在很大程度上取决于我忽略的协议(protocol)语义:

    public void serialEvent(SerialPortEvent event){
            switch(event.getEventType()) {

                case SerialPortEvent.DATA_AVAILABLE:
                    byte[] readBuffer = new byte[8];
                    String peso = "";
                    try {
                         while (inputStream.available()>0) {
                             int numBytes = inputStream.read(readBuffer);
                             peso += new String (readBuffer, 0, numBytes, "UTF-8");
                         }

                         m_dWeightBuffer = Double.parseDouble(peso);

                    } catch (IOException ex) {}
                    break;

            } 
    }

即在读取完所有数据后创建 double。

关于java - 从串口读取double,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22781613/

相关文章:

java - 使用 LoginButton 监听 Facebook 注销。 (4.1)

java - 如何使用 AlarmReceiver 每 10 分钟 ping 一次 GPS 位置?

c++ - Arduino serial.available 奇怪的错误

c++ - 在队列中存储一组字符?

java - 更改事件监听器中的变量?

bash - 在适用于 Linux 的 Windows 子系统 (WSL) 中查找事件串行端口

java - JAVA中的 double

java - 仅使用整数的乘法和除法时是否可能会失去精度?使用 double 怎么样?

mysql - 将 MySQL 中的列从 int 更改为 double?

java - 分配给同名的静态最终字段