Java浮点指针

标签 java android ftdi

我正在尝试获取串行数据并将其转换为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 解释为浮点型。

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

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

相关文章:

java - 任何字符都可以用 UTF-16 编码(使用 Java 8)

android 为什么向服务器发送信息只适用于 WIFI?

android - FlatList 不在 Android 模拟器上滚动

python - pylibftdi 在 Windows 安装上缺少 libftdi libusb

c - 使用 cygwin 通过 FTDI 使用 ftd2xx.lib 编译 c 应用程序

objective-c - FTDI 与 USB 设备的通信 - Objective C

java - 从映射中的对象中删除某些元素

java - 将java util日期作为时间戳存储到mysql中

java - Jsoup 白名单 : Parsing non-english character

android - 从 Activity 而不是父级返回主屏幕