BitWiser 是一系列方法和属性的集合,它能让您轻松地处理 bits(位)、bytes(字节)和 nibbles(半字节)。
该项目正处于早期开发阶段,欢迎您提交 pull request 来增加更多功能。
Data 对象,以及从 Data 对象转换回字节数组从未如此简单。Data 对象的简洁 DSL。Data 对象打印为十六进制字符串。使用 Swift 包管理器。将以下依赖项添加到您的 Package.swift 文件中:
.package(url: "https://github.com/DrAma999/BitWiser.git", from: "0.0.2")
或者直接从 Xcode 菜单的 Swift 包中添加 URL。
一个 Byte 实际上就是一个 UInt8,它被扩展后可以访问单个位的值。一个 Bit 是一个枚举,可以取两个值:.one(1)或 .zero(0)。
var value = Byte(0b1010_1010)
let bits = value.bits
print(bits)
// [0, 1, 0, 1, 0, 1, 0, 1]
注意: 位的表示形式显示为一个 Bit 数组,其中数组索引 0 表示最低有效位。
创建 Byte 后,您可以通过以下不同方式读取其位置的值:下标访问
let bit = value[0]
方法
// Query the value
let bit = value.bit(0)
// Ask if bit is set (equal to one)
let isSet = value.isBitSet(0)
属性
let bit = value.b0
创建可变的 Byte 后,您可以通过以下不同方式写入其位置的值:下标访问
value[0] = 1
方法
// Set the specified bit to 1
value.setBit(0)
// Reset the specified bit to 0
value.resetBit(0)
// Toggle the specified bit. If the bit in position zero is one it becomes zero and viceversa
value.toggleBit(0)
// Change the value of the specified bit to one
value.changeBit(0, to: .one )
// Chaining modifiers that return a new value without mutating
let newValue = value
.settingBit(0)
.resettingBit(3)
.togglingBit(4)
属性
value.b0 = .zero
可以肯定的是,如果您从事物联网 (IOT) 工作,您会遇到嵌入式工程师将一些信息放在一个半字节 (nibble) 中。使用 BitWiser,您可以从字节中提取半字节。
let value: Byte = 0b01011111
let (msb, lsb) = value.nibbles
还有许多方法和工具可以用来处理位、字节和半字节。
BitWiser 提供了一种 DSL,用于创建字节数组或 Data 对象。 DSL 兼容 if、else 和 for 语句,并与任何符合 DataRepresentable 协议的对象兼容。 以下是创建 Data 对象的示例:
Data {
[UInt8(0)]
UInt8(1)
Int8(2)
"\u{03}"
Int16(1284)
if dataClause {
CustomData()
}
}
以及一个字节数组:
Array<Byte> {
0b1010_1010
0b1100_1100
UInt8(32)
[0x05, 0x06]
Byte(0x01)
}
由于我是在业余时间开发这个项目,因此任何帮助都非常感谢。 欢迎提交 pull request。
图标由 Freepik 制作,来自 www.flaticon.com
MIT 许可证
版权所有 (c) 2021 Andrea Finollo
特此授予任何人免费复制、修改、合并、出版、发行、再许可和/或销售本软件及其相关文档(“软件”)的权利,并允许被提供本软件的人这样做,但须符合以下条件:
上述版权声明和本许可声明应包含在所有副本或实质性部分中。
本软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、特定用途适用性和非侵权性保证。在任何情况下,作者或版权持有人均不对任何索赔、损害或其他责任负责,无论是在合同、侵权或其他方面,因本软件或本软件的使用或其他处理方式而产生、引起或与之相关。