创建一个二进制标题

时间:2019-01-25 20:34:39

标签: swift header binary byte bit

我必须在16位上编码两个信息:Id和长度。

我将详细解释。

示例:

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 :(得分:1)

如果您确定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