Полезная нагрузка содержит байты двоичного представления значения.
Вы преобразовываете его обратно в значение, сдвигая каждый байт в соответствующую позицию:
let payload: [UInt8] = [2, 6, 239]
let value = Int(payload[0]) << 16 + Int(payload[1]) << 8 + Int(payload[2])
print(value) // 132847
Важным моментом является преобразование байтов в целые числа до сдвига , в противном случае возникнет ошибка переполнения. С другой стороны,
с умножением:
let value = (Int(payload[0]) * 256 + Int(payload[1])) * 256 + Int(payload[2])
или
let value = payload.reduce(0) { $0 * 256 + Int($1) }
Последний подход работает с произвольным числом байтов - до тех пор, пока
результат вписывается в Int
. Для 4 ... 8 байтов лучше выбрать UInt64
чтобы избежать ошибок переполнения:
let value = payload.reduce(0) { $0 * 256 + UInt64($1) }