Преобразование байтового значения правильно - PullRequest
0 голосов
/ 25 апреля 2018

Мне трудно получить правильное значение, которое мне нужно.Я получаю из своих характерных долей от:

func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor ...

Я могу прочитать и распечатать значения с:

let values = characteristic.value
for val in values! {
    print("Value", num)
}

Это дает мне:

"Value 0" // probe state not important
"Value 46" // temp 
"Value 2" // see below

Проблема в том, что временная температура не равна 46. Ниже приведен фрагмент инструкции о том, как мне нужно преобразовать байт, чтобы получить фактическую временную температуру.Фактическая температура была около 558 ºF.Вот часть инструкции:

Description: temperature data that is valid only if the temperature stat is normal
byte[1] = (unsigned char)temp;
byte[2] = (unsigned char)(temp>>8);
byte[3] = (unsigned char)(temp>>16);
byte[4] = (unsigned char)(temp>>24);

Не получается получить правильный темп?Пожалуйста, дайте мне знать, что я делаю неправильно.

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Согласно описанию, value[1] ... value[4] являются младшими значащими или наиболее значимыми байтами (32-разрядного целого) температуры, так что это то, как вы бы воссоздали это значение из байтов:

if let value = characteristic.value, value.count >= 5 {
    let tmp = UInt32(value[1]) + UInt32(value[2]) << 8 + UInt32(value[3]) << 16 + UInt32(value[4]) << 24
    let temperature = Int32(bitPattern: tmp)
}

Переполнение битов выполняется в целочисленной арифметике без знака, чтобы избежать переполнение. Предполагая, что температура является значением со знаком , это значение затем преобразуется в целое число со знаком с тем же битовое представление.

0 голосов
/ 25 апреля 2018

В инструкциях вам ответят.Вы получаете 46 в байте 1, затем 2 в байте 2. В инструкциях говорится, что байт 1 следует оставить в покое, но для байта 2 мы должны сдвинуть результаты как temp>>8 - что означает «умножить на 256»."(потому что 2^8 это 256).Ну, что такое

46+256×2

Это 558, просто результат, который мы ищем.

...