将二进制文件读取为字符串

时间:2018-01-17 17:35:38

标签: objective-c swift cocoa

如何将二进制(非文本)文件读取为字符串? 我需要类似cat -v file.dat命令所做的事情。

3 个答案:

答案 0 :(得分:2)

假设您以某种方式将文件内容读入Data,您可以使用:

extension UInt8 {
    var printableAscii : String {
        switch self {
        case 0..<32:    return "^" + (self + 64).printableAscii
        case 127:       return "^?"
        case 32..<128:  return String(bytes: [self], encoding:.ascii)!
        default:        return "M-" + (self & 127).printableAscii
        }
    }
}

extension Collection where Element == UInt8 {
    var printableAscii : String {
        return self.map { $0.printableAscii } .joined()
    }
}

let string = data.printableAscii

将数据的字节转换为cat -v生成的边缘清晰格式。

答案 1 :(得分:1)

如果要转换字节序列,可以使用字符串初始值设定项init?(data: Data, encoding: String.Encoding)将数据转换为字符串或init?<S>(bytes: S, encoding: String.Encoding) where S : Sequence, S.Element == UInt8。只需确保使用.ascii字符串编码:

let string = String(data: data, encoding: .ascii)

答案 2 :(得分:0)

您可以使用

阅读文件
let data = FileManager.default.contents(atPath: filePath)

然后使用

将数据转换为base 64字符串
let string = data.base64EncodedString()

或带有

的十六进制字符串
let string = data.map { String(format: "%02hhx", $0) }.joined()