测试测试 | ✗ |
语言语言 | SwiftSwift |
许可 | BSD |
发布最后发布 | 2018年2月 |
SwiftSwift 版本 | 3.1 |
SPM支持 SPM | ✗ |
由 Łukasz Kwoska 维护。

BinarySwift 是一个用于解析二进制数据的纯 Swift 库。它包含两个组件 - 可以用于在不更改环境中的二进制数据解析的 BinaryReader,以及保持最后一个读取字节的索引并以自动更新它的 BinaryDataReader。
使用此库,您可以读取
BinaryData 有多种初始化器。最显著的是 public init(data: [UInt8], bigEndian: Bool = default)
和 public init(data: NSData, bigEndian: Bool = default)
。
BinaryData 是一个不可变结构体,因此可以用 let
安全地创建。
使用 BinaryReader
解析 IP 框架头非常简单
struct IPHeader {
let version: UInt8
let headerLength: UInt8
let typeOfService: UInt8
let length: UInt16
let id: UInt16
let offset: UInt16
let timeToLive: UInt8
let proto:UInt8
let checksum: UInt16
let source: in_addr
let destination: in_addr
}
let nsData = ...
let data = BinaryData(data: nsData)
let header = IPHeader(version: try data.get(0),
headerLength: try data.get(1),
typeOfService: try data.get(2),
length: try data.get(3),
id: try data.get(5),
offset: try data.get(7),
timeToLive: try data.get(8),
proto: try data.get(9),
checksum: try data.get(10),
source: in_addr(s_addr: try data.get(12)),
destination: in_addr(s_addr: try data.get(16)))
如果您没有问题使用可变引用类型,使用 BinaryDataReader 解析则更简单
struct IPHeader {
let version: UInt8
let headerLength: UInt8
let typeOfService: UInt8
let length: UInt16
let id: UInt16
let offset: UInt16
let timeToLive: UInt8
let proto:UInt8
let checksum: UInt16
let source: in_addr
let destination: in_addr
}
let nsData = ...
let data = BinaryData(data: nsData)
let reader = BinaryDataReader(data)
let header = IPHeader(version: try reader.read(),
headerLength: try reader.read(),
typeOfService: try reader.read(),
length: try reader.read(),
id: try reader.read(),
offset: try reader.read(),
timeToLive: try reader.read(),
proto: try reader.read(),
checksum: try reader.read(),
source: in_addr(s_addr: try reader.read()),
destination: in_addr(s_addr: try reader.read()))
您甚至可以将 reader
传递给其他函数,因为它是一个 class
,并且引用语义适用。
这个库是完美的折中方案。既非魔法也非过于冗长。
#贡献Contributions