gpt4 book ai didi

Java浮点指针

转载 作者:行者123 更新时间:2023-11-30 08:52:32 27 4
gpt4 key购买 nike

我正在尝试获取串行数据并将其转换为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);

}






}

输出:

enter image description here

在 C 编码中,我将使用一个浮点指针,这个指针有 4 个字节长,这将使一个成功的十六进制浮点。我的问题是如何在 Java 上使用类似 C 的等效浮点指针?

最佳答案

Java 中没有浮点指针这样的东西。您在方法定义中使用的内容 - 它告诉 Java 如何处理提供的引用 - 您可以将其视为指针。 Java 假定在这个特定地址将是 Java 将解释为 float 的数据。

当您使用不同的处理器时还应该考虑的一点 - Endianness - 我不确定您的处理器使用什么,但您必须确定并仔细检查两侧是大端还是小端。

关于Java浮点指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30154527/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com