当我在NSData
对象上调用-description
时,我看到一个由NSData
对象字节组成的漂亮的十六进制字符串,如下所示:
<f6e7cd28 0fc5b5d4 88f8394b af216506 bc1bba86 4d5b483d>
我希望将数据的这种表示(减去lt/gt引号)放入内存中的NSString
中,这样我就可以使用它了。我不喜欢调用-[NSData description]
,然后只修剪lt/gt引号(因为我假设这不是NSData
公共接口的保证方面,将来可能会发生变化)。
将NSData
对象的这种表示形式转换为NSString
对象(而不是调用-description
)的最简单方法是什么?
发布于 2016-07-01 03:08:12
我只想补充说,由于Data
现在是一个集合,所以@PassKits的方法可以使用Swift 3非常优雅地编写。
extension Data {
var hex: String {
var hexString = ""
for byte in self {
hexString += String(format: "%02X", byte)
}
return hexString
}
}
或者..。
extension Data {
var hex: String {
return self.map { b in String(format: "%02X", b) }.joined()
}
}
甚至..。
extension Data {
var hex: String {
return self.reduce("") { string, byte in
string + String(format: "%02X", byte)
}
}
}
发布于 2012-09-16 05:18:47
我最喜欢@Erik_Aigner的答案。我只是稍微重构了一下:
NSData *data = [NSMutableData dataWithBytes:"acani" length:5];
NSUInteger dataLength = [data length];
NSMutableString *string = [NSMutableString stringWithCapacity:dataLength*2];
const unsigned char *dataBytes = [data bytes];
for (NSInteger idx = 0; idx < dataLength; ++idx) {
[string appendFormat:@"%02x", dataBytes[idx]];
}
发布于 2014-11-27 21:33:05
在Swift中,您可以创建一个扩展。
extension NSData {
func toHexString() -> String {
var hexString: String = ""
let dataBytes = UnsafePointer<CUnsignedChar>(self.bytes)
for (var i: Int=0; i<self.length; ++i) {
hexString += String(format: "%02X", dataBytes[i])
}
return hexString
}
}
然后,您可以简单地使用:
let keyData: NSData = NSData(bytes: [0x00, 0xFF], length: 2)
let hexString = keyData.toHexString()
println("\(hexString)") // Outputs 00FF
https://stackoverflow.com/questions/7520615
复制相似问题