[英]Read double from serial port
我試圖從串行端口讀取雙精度。 我可以用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個塊(可能是64位)上寫串行端口:
您正在讀取的最大緩沖區為64位(readBuffer.length * 8位),因此最后一個可能是:
0011111111010000000000000000000000000000000000000000000000000000
試試吧:
String s = "0011111111010000000000000000000000000000000000000000000000000000";
double d = Double.longBitsToDouble(Long.parseLong(s,2));
System.out.println(d); //-> 0.25
至於現在沒錯 。
可能您想在一個點上處理所有4個塊,因此您可以嘗試以下操作-當然,這很大程度上取決於我忽略的協議語義:
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;
}
}
即,在讀取所有數據之后創建雙精度型。
嘗試這樣做:
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);
peso += new String (readBuffer, 0, numBytes, "UTF-8").replaceAll("\\s+","").replaceAll("\\n", "").replaceAll("\\r", "");
}
} catch (IOException ex) {}
break;
}
}
在此SerialEvent方法的外部初始化String peso。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.