我正在尝试在java中编写以下代码。 CFSwapInt32LittleToHost在这里尝试将字节从Little Endian转换或排序为Host字节顺序。有人能告诉我是否有任何等效的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];
答案 0 :(得分:0)
我建议您在Java中解决此问题的方式在C中是相同的:您需要认识到内部字节序和线上字节序之间的区别,并尽量避免产生内部字节序。
如果你有一个字节序列,并且你希望将它们组合起来形成一个整数值,那么按照线上字节顺序指定你应该这样做的顺序使用乘法和加法。这就是你如何在不产生内部字节序的情况下做到的。
如果除了产生内部字节序之外的任何原因,你真的需要交换字节序,你可以通过重新排列字节来做到这一点。从“小端”到“大端”的算法将是相同的,因为它是从“大端”到“小端”,因此它可能不应该被称为CFSwapInt32LittleToHost
;它应该被称为swap_endian
。