Swift 中将 NSData 转换为十六进制字符串:完整的代码示例
Swift 中将 NSData 转换为十六进制字符串
本教程将详细介绍如何使用 Swift 将 NSData 转换为十六进制字符串。
Objective-C 代码:
+(NSString*)hexadecimalString:(NSData *)data{
NSString* result;
const unsigned char* dataBuffer = (const unsigned char*)[data bytes];
if(!dataBuffer){
return nil;
}
NSUInteger dataLength = [data length];
NSMutableString* hexString = [NSMutableString stringWithCapacity:(dataLength * 2)];
for(int i = 0; i < dataLength; i++){
[hexString appendString:[NSString stringWithFormat:@'%02lx', (unsigned long)dataBuffer[i]]];
}
result = [NSString stringWithString:hexString];
return result;
}
Swift 代码:
func hexadecimalString(data: NSData) -> String? {
var result: String?
let dataBuffer = data.bytes.bindMemory(to: UInt8.self, capacity: data.length)
if dataBuffer.isEmpty {
return nil
}
let dataLength = data.length
let hexString = NSMutableString(capacity: (dataLength * 2))
for i in 0..<dataLength {
hexString.appendFormat('%02lx', dataBuffer[i])
}
result = hexString as String
return result
}
代码解释:
- 数据缓冲区获取: 使用
data.bytes.bindMemory(to: UInt8.self, capacity: data.length)获取 NSData 的字节缓冲区,并将类型转换为 UInt8。 - 空数据处理: 如果数据缓冲区为空,则返回 nil。
- 创建十六进制字符串: 使用
NSMutableString(capacity: (dataLength * 2))创建一个可变的十六进制字符串,其容量为数据长度的 2 倍。 - 循环遍历字节: 使用
for循环遍历数据缓冲区的每个字节。 - 格式化十六进制值: 使用
appendFormat('%02lx', dataBuffer[i])将每个字节格式化为两位十六进制值并追加到十六进制字符串。 - 返回结果: 最后,将十六进制字符串转换为 String 类型并返回。
示例:
let data = 'Hello World!'.data(using: .utf8)! // 创建一个 NSData
let hexString = hexadecimalString(data: data) // 转换为十六进制字符串
print(hexString!) // 输出:48656c6c6f20576f726c6421
注意:
- 该代码使用了
bindMemory(to:capacity:)函数,该函数是 Swift 中的安全内存管理机制,可以避免内存安全问题。 - 如果你需要将十六进制字符串转换回 NSData,可以使用
Data(hexString: String)方法。
希望本文对你有帮助!如果你还有其他问题,请随时提问。
原文地址: https://www.cveoy.top/t/topic/1we 著作权归作者所有。请勿转载和采集!