java - Java 中的 CFwapInt32LittleToHost 等效项

标签 java c

我正在尝试用java编写以下代码。 CFwapInt32LittleToHost 此处尝试将字节从 Little Endian 转换或排序为主机字节顺序。有人可以告诉我是否有任何等效的java函数或建议我如何用java编写它。

//  All temperatures are read in celsius.
        //  For display in Farenheit, manual conversion is required.
        NSData *data = characteristic.value;
        uint8_t* dataPointer = (uint8_t*)[data bytes];

        uint8_t flags = dataPointer[0]; dataPointer++;
        int32_t tempData = (int32_t)CFSwapInt32LittleToHost(*(uint32_t*)dataPointer); dataPointer += 4;
        int8_t exponent = (int8_t)(tempData >> 24);
        int32_t mantissa = (int32_t)(tempData & 0x00FFFFFF);

        if( tempData == 0x007FFFFF )
        {
            NSLog(@"Invalid temperature value received");
            return;
        }

        float tempValue = (float)(mantissa*pow(10, exponent));

        [_delegate updateTemperature:tempValue];

最佳答案

我建议您在 Java 中解决此问题的方法与在 C 中相同:您需要认识内部字节序线上字节序之间的区别,并尽量避免产生内部字节序

如果您有一个字节序列,并且希望将它们组合起来形成一个整数值,请按照线上字节序指定的顺序使用乘法和加法。这就是您在不产生内部字节顺序的情况下执行此操作的方法。

如果除了产生内部字节序之外的任何原因,您确实需要交换字节序,则可以通过重新排列字节来实现。从“小端”到“大端”的算法与从“大端”到“小端”的算法是相同的,因此它可能不应该被称为 CFSwapInt32LittleToHost 之类的名称;它应该被称为 swap_endian

关于java - Java 中的 CFwapInt32LittleToHost 等效项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29529222/

相关文章:

CS50 现金有效输入退出程序

java - 无法在屏幕旋转时保持 RecyclerView 位置

java - 以编程方式在android中锁定方向

java - 为什么 x 被视为对象(即使它引用数组)也是一个错误?

java - JSON对齐其循环相同的项目

c - 数组的指针算术

c++ - 数组中的空空格无法识别 C++ C

java - Spring Boot 无法启动 Tomcat 8

c - 在 AES 密码对象上禁用 PKCS#7 填充?

c - select() 和 poll() 是无状态的是什么意思?