Я хочу разобрать температуру из байт.Как очистить самый старший бит в байте?
Температура составляет 2 байта. Самый старший бит первого байта указывает, является ли температура положительной или отрицательной.
Это то, что я до сих пор:
public double parseTemperatureBytes(byte[] temperatureBytes) {
// Must be divided by 10 (1 decimal)
// First bit indicates sign (bit 1 = negative, bit 0 = positive)
// Range [0x7FFF] : [-3276.7 … +3276.7]
byte firstByte = temperatureBytes[0];
int positiveOrNegative = ParseUtils.getMostSignificantBit(firstByte);
boolean isPositive = positiveOrNegative == 0;
String temperatureHex = ParseUtils.bytesToHex(temperatureBytes);
int temperatureHexToInteger = Integer.parseInt(temperatureHex, 16);
double temperature = temperatureHexToInteger/(double) 10;
if (!isPositive) {
temperature = -temperature;
}
return temperature;
}
// ParseUtils
public static int getMostSignificantBit(byte b) {
return (b & 0xff) >> 7;
}
Это работает, но я все равно должны убедиться, что я игнорирую значащий бит первого байта. Это всего лишь флаг, а не часть температуры.
Ex: Если я прохожу в 0xFFFF он возвращает -6553,5, но это должно быть -3276,7
Как я могу добиться этого?
Как действительно ли это значение отличается от обычного «большого конца»? – EJP