Mar*_*n R 11
Data来自Swift 3没有"内置"方法将其内容打印为十六进制字符串,或者Data从十六进制字符串创建值.
"数据到十六进制字符串"方法可以在例如如何在swift中将数据转换为十六进制字符串或如何使用swift打印变量类型数据的内容中找到?或者在swift 3.0中将字符串转换为数据.以下是第一个链接的实现:
extension Data {
func hexEncodedString() -> String {
return map { String(format: "%02hhx", $0) }.joined()
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个可能的实现反向"十六进制字符串到数据"转换(从代码检查中的十六进制字符串到字节(NSData),转换为Swift 3并得到改进)作为可用的初始化程序:
extension Data {
init?(fromHexEncodedString string: String) {
// Convert 0 ... 9, a ... f, A ...F to their decimal value,
// return nil for all other input characters
func decodeNibble(u: UInt16) -> UInt8? {
switch(u) {
case 0x30 ... 0x39:
return UInt8(u - 0x30)
case 0x41 ... 0x46:
return UInt8(u - 0x41 + 10)
case 0x61 ... 0x66:
return UInt8(u - 0x61 + 10)
default:
return nil
}
}
self.init(capacity: string.utf16.count/2)
var even = true
var byte: UInt8 = 0
for c in string.utf16 {
guard let val = decodeNibble(u: c) else { return nil }
if even {
byte = val << 4
} else {
byte += val
self.append(byte)
}
even = !even
}
guard even else { return nil }
}
}
Run Code Online (Sandbox Code Playgroud)
例:
// Hex string to Data:
if let data = Data(fromHexEncodedString: "0002468A13579BFF") {
let idata = Data(data.map { 255 - $0 })
// Data to hex string:
print(idata.hexEncodedString()) // fffdb975eca86400
} else {
print("invalid hex string")
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2449 次 |
| 最近记录: |