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
}

代码解释:

  1. 数据缓冲区获取: 使用 data.bytes.bindMemory(to: UInt8.self, capacity: data.length) 获取 NSData 的字节缓冲区,并将类型转换为 UInt8。
  2. 空数据处理: 如果数据缓冲区为空,则返回 nil。
  3. 创建十六进制字符串: 使用 NSMutableString(capacity: (dataLength * 2)) 创建一个可变的十六进制字符串,其容量为数据长度的 2 倍。
  4. 循环遍历字节: 使用 for 循环遍历数据缓冲区的每个字节。
  5. 格式化十六进制值: 使用 appendFormat('%02lx', dataBuffer[i]) 将每个字节格式化为两位十六进制值并追加到十六进制字符串。
  6. 返回结果: 最后,将十六进制字符串转换为 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) 方法。

希望本文对你有帮助!如果你还有其他问题,请随时提问。

Swift 中将 NSData 转换为十六进制字符串:完整的代码示例

原文地址: https://www.cveoy.top/t/topic/1we 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录