iOS - swift3 - Bluetooth - writeValue UInt16 [дубликат]

Программирование на интерфейсы является удивительным, оно способствует ослаблению связи. Как упоминал @lassevk, очень важно использовать Inversion of Control.

Кроме того, ознакомьтесь с принципами SOLID. здесь представляет собой серию видео

. Он проходит через жесткий кодированный (сильно связанный пример), затем просматривает интерфейсы, и, наконец, переходит к инструменту IoC / DI (NInject)

11
задан Jeef 28 September 2015 в 20:13
поделиться

4 ответа

Вы должны работать с целыми целыми знаками:

let bytes: [UInt8] = [255, 251]
let uInt16Value = UInt16(bytes[0]) << 8 | UInt16(bytes[1])
let uInt8Value0 = uInt16Value >> 8
let uInt8Value1 = UInt8(uInt16Value & 0x00ff)

Если вы хотите преобразовать UInt16 в битовый эквивалент Int16, вы можете сделать это с помощью определенного инициализатора:

let int16Value: Int16 = -15
let uInt16Value = UInt16(bitPattern: int16Value)

И наоборот:

let uInt16Value: UInt16 = 65000
let int16Value = Int16(bitPattern: uInt16Value)

В вашем случае:

let nv: Int16 = -15
let uNv = UInt16(bitPattern: nv)

UInt8(uNv >> 8)
UInt8(uNv & 0x00ff)
12
ответ дан mixel 20 August 2018 в 19:09
поделиться
  • 1
    Спецификация моих данных требует, чтобы я декодировал эти два байта как Signed Ints, работает декодирование – Jeef 28 September 2015 в 20:14
  • 2
    Обновлен ответ. Сначала вы должны преобразовать свое значение Int16 в UInt16, а затем разделить на два значения UInt8. – mixel 28 September 2015 в 20:21
extension Int16 {
    var twoBytes : [UInt8] {
        let unsignedSelf = UInt16(bitPattern: self)
        return [UInt8(truncatingIfNeeded: unsignedSelf >> 8),
                UInt8(truncatingIfNeeded: unsignedSelf)]
    }
}

var test : Int16 = -15
test.twoBytes // [255, 241]
0
ответ дан minho oh 20 August 2018 в 19:09
поделиться

Я бы просто сделал это:

let a = UInt8(nv >> 8 & 0x00ff)  // 255
let b = UInt8(nv & 0x00ff)       // 241
2
ответ дан MirekE 20 August 2018 в 19:09
поделиться

Вы можете использовать инициализатор init(truncatingBitPattern: Int16) :

let nv: Int16 = -15
UInt8(truncatingBitPattern: nv >> 8) // -> 255
UInt8(truncatingBitPattern: nv) // -> 241
6
ответ дан rintaro 20 August 2018 в 19:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: