Skip to content

Instantly share code, notes, and snippets.

@zinwalin
Forked from kimjj81/UInt_extension.swift
Created April 27, 2022 08:31
Show Gist options
  • Save zinwalin/cbe499d2bb7b008675b27d00b33e7c06 to your computer and use it in GitHub Desktop.
Save zinwalin/cbe499d2bb7b008675b27d00b33e7c06 to your computer and use it in GitHub Desktop.
Convert UInt to UInt8(byte) Array in swift.
protocol UIntToBytesConvertable {
var toBytes: [UInt8] { get }
}
extension UIntToBytesConvertable {
func toByteArr<T: BinaryInteger>(endian: T, count: Int) -> [UInt8] {
var _endian = endian
let bytePtr = withUnsafePointer(to: &_endian) {
$0.withMemoryRebound(to: UInt8.self, capacity: count) {
UnsafeBufferPointer(start: $0, count: count)
}
}
return [UInt8](bytePtr)
}
}
extension UInt16: UIntToBytesConvertable {
var toBytes: [UInt8] {
if CFByteOrderGetCurrent() == Int(CFByteOrderLittleEndian.rawValue) {
return toByteArr(endian: self.littleEndian,
count: MemoryLayout<UInt16>.size)
} else {
return toByteArr(endian: self.bigEndian,
count: MemoryLayout<UInt16>.size)
}
}
}
extension UInt32: UIntToBytesConvertable {
var toBytes: [UInt8] {
if CFByteOrderGetCurrent() == Int(CFByteOrderLittleEndian.rawValue) {
return toByteArr(endian: self.littleEndian,
count: MemoryLayout<UInt32>.size)
} else {
return toByteArr(endian: self.bigEndian,
count: MemoryLayout<UInt32>.size)
}
}
}
extension UInt64: UIntToBytesConvertable {
var toBytes: [UInt8] {
if CFByteOrderGetCurrent() == Int(CFByteOrderLittleEndian.rawValue) {
return toByteArr(endian: self.littleEndian,
count: MemoryLayout<UInt64>.size)
} else {
return toByteArr(endian: self.bigEndian,
count: MemoryLayout<UInt64>.size)
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment