【问题标题】:Create a Binary Header创建二进制标头
【发布时间】:2019-06-19 17:00:43
【问题描述】:

我必须在 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

所以现在我被阻止添加长度的两位。

感谢阅读

【问题讨论】:

  • header,你想给id多少位,给length多少位?如果说id = 0b1111_1111_1111_1111length = 0b1010_1010header be 应该是什么?
  • 14 位 id 和 2 位长度 // (Id 14bits =0000 0000 0001 00)(length 2 bits =10) id 永远不会超过 14bits 和长度 2 bits
  • let header: UInt16 = (id &lt;&lt; 2) + UInt16(length &amp; UInt8(0b11)) 怎么样?
  • 谢谢它的工作!但“0b11”是什么意思?
  • 如果你确定长度永远不会超过 3(2 位),那么你可以简单地写 let header: UInt16 = (id

标签: swift header binary byte bit


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-16
    • 2017-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-08
    • 2020-08-03
    相关资源
    最近更新 更多