我试图解码一个protobuff编码的消息,所以我需要将protobuff消息中的第一个字节(密钥)转换为位,这样我就可以找到字段号。我如何将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,它将一个位数组转换为字节数组。
5条答案
按热度按时间fcipmucu1#
下面是一个从字节中获取
Bit
数组的基本函数:这里,
Bit
是一个自定义的枚举类型,我定义如下:使用此设置,输出以下代码:
将是:
3npbholx2#
改进mohak的答案。使用通用函数或扩展来满足不仅仅是
UInt8
的需求。yi0zb3m43#
您可以执行一些按位操作来获取索引1-4处的位的值。
axr492tv4#
一个更短的:
我们可以将其用作:
ocebsuys5#
Swift 4.5适合我: