首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将NSData转换为NSString十六进制字符串?

如何将NSData转换为NSString十六进制字符串?
EN

Stack Overflow用户
提问于 2011-09-23 03:52:17
回答 7查看 48.2K关注 0票数 55

当我在NSData对象上调用-description时,我看到一个由NSData对象字节组成的漂亮的十六进制字符串,如下所示:

代码语言:javascript
复制
<f6e7cd28 0fc5b5d4 88f8394b af216506 bc1bba86 4d5b483d>

我希望将数据的这种表示(减去lt/gt引号)放入内存中的NSString中,这样我就可以使用它了。我不喜欢调用-[NSData description],然后只修剪lt/gt引号(因为我假设这不是NSData公共接口的保证方面,将来可能会发生变化)。

NSData对象的这种表示形式转换为NSString对象(而不是调用-description)的最简单方法是什么?

EN

回答 7

Stack Overflow用户

发布于 2016-07-01 03:08:12

我只想补充说,由于Data现在是一个集合,所以@PassKits的方法可以使用Swift 3非常优雅地编写。

代码语言:javascript
复制
extension Data { 
    var hex: String {
        var hexString = ""
        for byte in self {
            hexString += String(format: "%02X", byte)
        }

        return hexString
    }
}

或者..。

代码语言:javascript
复制
extension Data {
    var hex: String {
        return self.map { b in String(format: "%02X", b) }.joined()
    }
}

甚至..。

代码语言:javascript
复制
extension Data {
    var hex: String {
        return self.reduce("") { string, byte in
            string + String(format: "%02X", byte)
        }
    }
}
票数 25
EN

Stack Overflow用户

发布于 2012-09-16 05:18:47

我最喜欢@Erik_Aigner的答案。我只是稍微重构了一下:

代码语言:javascript
复制
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]];
}
票数 22
EN

Stack Overflow用户

发布于 2014-11-27 21:33:05

在Swift中,您可以创建一个扩展。

代码语言:javascript
复制
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
    }
}

然后,您可以简单地使用:

代码语言:javascript
复制
let keyData: NSData = NSData(bytes: [0x00, 0xFF], length: 2)

let hexString = keyData.toHexString()
println("\(hexString)") // Outputs 00FF
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7520615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档