我正在尝试获取串行数据并将其转换为Float
。
数据从 MCU 传递到 FTDI 芯片并传递到我的 Android 设备。
当我得到 0xbf700000
(-0.9375)、0x3dbc01a3
(0.0918)、0x3e9f9724
(0.3117) 的值时,我的 java 代码将其更改为 float
但不是 float
应该的样子,它需要每个字节并更改它,而不是 float 应该的 4 个字节。
代码:
package com.application.i;
import jp.ksksue.driver.serial.FTDriver;
import android.app.Activity;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.hardware.usb.UsbManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class FTDI extends Activity{
// [FTDriver] Object
FTDriver mSerial;
// [FTDriver] Permission String
private static final String ACTION_USB_PERMISSION =
"jp.ksksue.tutorial.USB_PERMISSION";
Button btnRead;
TextView Monitor;
TextView indicator;
StringBuffer mText = new StringBuffer();
StringBuffer Data = new StringBuffer();
String places=null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ftdisub);
btnRead = (Button) findViewById(R.id.btnRead);
Monitor = (TextView)findViewById(R.id.onitor);
indicator = (TextView)findViewById(R.id.indicator);
// [FTDriver] Create Instance
mSerial = new FTDriver((UsbManager)getSystemService(Context.USB_SERVICE));
// [FTDriver] setPermissionIntent() before begin()
PendingIntent permissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(
ACTION_USB_PERMISSION), 0);
mSerial.setPermissionIntent(permissionIntent);
// [FTDriver] Open USB Serial
if(mSerial.begin(FTDriver.BAUD115200)) {
btnRead.setEnabled(true);
Toast.makeText(this, "connected", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "cannot connect", Toast.LENGTH_SHORT).show();
}
}
// @Override
// public boolean onCreateOptionsMenu(Menu menu) {
// getMenuInflater().inflate(R.menu.ftdisub, menu);
// return true;
// }
//
@Override
public void onDestroy() {
super.onDestroy();
// [FTDriver] Close USB Serial
mSerial.end();
}
public void onReadClick(View view) {
int i,len;
// [FTDriver] Create Read Buffer
byte[] rbuf = new byte[12]; // 1byte <--slow-- [Transfer Speed] --fast--> 4096 byte
// [FTDriver] Read from USB Serial
len = mSerial.read(rbuf);
for(i=0; i<len; i++) {
if ((char) rbuf[i] == 0x23){
Data.append((int) i+1);
Data.append((char) 0x23);
}
mText.append((float)rbuf[i]);
}
mText.append((char) 0x2c);
indicator.setText(Data);
Monitor.setText(mText);
}
}
输出:
在 C 编码中,我将使用浮点指针,该指针有 4 个字节长,这将使十六进制成功浮点。 我的问题是如何在 Java 上使用类似 C 的等效浮点指针?
最佳答案
Java中没有浮点指针这样的东西。您在方法定义中使用的内容 - 它告诉 Java 如何处理提供的引用 - 您可以将其视为指针。 Java 假定该特定地址处的数据将被 Java 解释为浮点型。
使用不同处理器时还应该考虑的一点 - Endianness - 我不确定您的处理器使用什么,但您必须确定并仔细检查两侧是大端还是小端。
关于Java浮点指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30154527/