在处理网络协议等一些二进制数据时,一般都是 C 或 C++ 擅长的领域,怎么在 swift 方便的读取二进制的信息呢?
定义
1 2 3 4 5 6 7 8
publicstructPayload { // 保存当前位置 publicvar pos: Int // 保存二进制数据 var data: Data
}
固定长度数值的读取方法
1 2 3 4 5 6 7 8 9
mutatingfuncread<T: FixedWidthInteger>(_type: T.Type) -> T { let size =MemoryLayout<T>.size let value =self.data[self.pos...size].withUnsafeBytes({ p -> Tin return p.load(as: T.self).bigEndian }) self.pos += size return value }
固定长度数值的写入方法
1 2 3 4 5 6
mutatingfuncwrite<T: FixedWidthInteger>(_value: T) { var source = value.littleEndian let d =Data(bytes: &source, count: MemoryLayout<T>.size) self.data.append(d) }