gpt4 book ai didi

arrays - Swift - 将 UInt8 字节转换为位数组

转载 作者:可可西里 更新时间:2023-10-31 23:56:47 25 4
gpt4 key购买 nike

我正在尝试解码 protobuff 编码的消息,因此我需要将 protobuff 消息中的第一个字节( key )转换为位,以便找到字段编号。如何将 UInt8(字节)转换为位数组?

伪代码

private func findFieldNum(from byte: UInt8) -> Int {
//Byte is 0001 1010
var fieldNumBits = byte[1] ++ byte[2] ++ byte[3] ++ byte[4] //concatentates bits to get 0011
getFieldNum(from: fieldNumBits) //Converts 0011 to field number, 2^1 + 2^0 = 3
}

我看到了this question , 它将位数组转换为字节数组。

最佳答案

这是一个从字节中获取Bit数组的基本函数:

func bits(fromByte byte: UInt8) -> [Bit] {
var byte = byte
var bits = [Bit](repeating: .zero, count: 8)
for i in 0..<8 {
let currentBit = byte & 0x01
if currentBit != 0 {
bits[i] = .one
}

byte >>= 1
}

return bits
}

这里,Bit 是我定义如下的自定义枚举类型:

enum Bit: UInt8, CustomStringConvertible {
case zero, one

var description: String {
switch self {
case .one:
return "1"
case .zero:
return "0"
}
}
}

使用此设置,输出以下代码:

let byte: UInt8 = 0x1f

print(bits(fromByte: byte))

会是:

[1, 1, 1, 1, 1, 0, 0, 0]

关于arrays - Swift - 将 UInt8 字节转换为位数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44807378/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com