Учитывая массив:
let bytes: [UInt8] = [204, 74, 3, 0, 97, 168, 209, 239]
давайте получим длину сообщения:
let length = Int(bytes[2])
msg
- это переменная, в которой будет храниться результат:
var msg = 0
index
будет указывать на индексы октетов всего сообщения, от LSB (более высокий индекс в bytes
) до MSB (более низкий индекс в bytes
)
var index = bytes.count - 3
power
- это сила, с которой мы будем сдвигать октеты
var power = 1
Затем мы вычисляем сообщение следующим образом:
while index > 2 {
msg += Int(bytes[index]) * power
power = power << 8
index -= 1
}
результат:
print(msg) //25000
Или, как предлагает @ JoshCaswell :
var msg: UInt64 = 0
var index = 3
while index < bytes.count - 2 {
msg <<= 8 //msg = msg << 8
msg += UInt64(bytes[index])
index += 1
}
В обоих решениях мы предполагаем, что сообщение может соответствоватьв Int
или UInt64