Python有两个非常有用的库方法(binascii.a2b_hex(keyStr)和binascii.hexlify(keyBytes)),我一直在Swift中苦苦挣扎。 Swift中有什么随处可用的吗?如果没有,将如何实现它?给定所有边界和其他检查(如偶数长度键)。
答案 0 :(得分:11)
Data
没有“内置”方法来打印其内容
十六进制字符串,或者从十六进制字符串创建Data
值。
可以找到“数据到十六进制字符串”方法,例如在How to convert Data to hex string in swift或How to print the content of a variable type Data using swift?或converting string to data in swift 3.0。以下是第一个链接的实现:
extension Data {
func hexEncodedString() -> String {
return map { String(format: "%02hhx", $0) }.joined()
}
}
这是反向“十六进制字符串到数据”的可能实现 转换(取自Hex String to Bytes (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 }
}
}
示例:
// 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")
}
答案 1 :(得分:0)
不熟悉Python及转换数字时所执行的检查,但您可以扩展以下功能:
var Person = function() {
this.setName = function(name) {
this.name = name;
}
this.sayHi = function() {
return "Hi, my name is " + this.name;
}
}
var personTwo = new Person()
personTwo.setName("Rafael");
console.log(personTwo.sayHi()); // Hi, my name is Rafael
答案 2 :(得分:0)
Swift 2
LEFT JOIN [Sheet1$] AS t1 ON t2.ID = t1.ID