作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试用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/
我是一名优秀的程序员,十分优秀!