Создать двоичный заголовок - PullRequest
0 голосов
/ 25 января 2019

Я должен кодировать в 16 битах две информации: идентификатор и длину.

Я объясню более подробно.

Пример:

let id: UInt16 = 4 // 0000 0000 0000 0100
let length: UInt8 = 2 // 0000 0010

Я хотел быкодировать в этой форме.

(Id=0000 0000 0001 00)(Length=10) // 0000 0000 0001 0010

Я сделал сдвиг немного

let header: UInt16 = id << 2 // 0000 0000 0001 0000

Так что теперь я заблокирован, чтобы добавить два бита длины.

Спасибо за чтение

1 Ответ

0 голосов
/ 26 января 2019

Если вы уверены, что id никогда не превысит 0b0011_1111_1111_1111 и что length не больше 0b0000_0011, тогда вы можете закодировать заголовок следующим образом:

let header: UInt16 = (id << 2) + UInt16(length)

И вы можете проверить результат следующим образом:

let leadingZeros = String(repeating: "0", count: header.leadingZeroBitCount)
print(leadingZeros + String(header, radix: 2))  //0000000000010010
...