我必须在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
所以现在我被禁止将长度的两位相加。
感谢阅读
答案 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