我从数据库中收到两个等效字符串,具体取决于我是以二进制还是文本格式请求它。
二进制是十六进制的...... 4d4d002a0000100801010101010101...
(134916个字符)
文字是(我认为是ASCII十进制)...... //x3464346430303261303030...
(269832个字符)
我可以将十六进制版本转换为字节数组,最终转换为 NSData (67458字节):
let data = NSMutableData(capacity: self.characters.count / 2)
for var index = self.startIndex; index < self.endIndex; index = index.advancedBy(2) {
let byteString = self.substringWithRange(Range<String.Index>(start: index, end: index.advancedBy(2)))
let byteUInt = UInt8(strtoul(byteString, nil, 16))
data?.appendBytes([UInt8]([byteUInt]), length: 1)
}
但我对文本版本没有运气。尝试解析它有数百万种不同的方式,我无法提出等效的转换。
如果重要,数据库是PostgreSQL v9.5,文本格式的数据作为以空字符结尾的字符串(char *)返回。
非常感谢任何见解。
答案 0 :(得分:0)
似乎&#34; ASCII表示&#34;是十六进制编码的十六进制编码,因此您应该能够通过应用相同的转换两次来生成正确的结果:
34 | 64 | 34 | 64 | 30 | 30 | 32 | 61 | 30 | 30 | 30 | -- Original
4 | d | 4 | d | 0 | 0 | 2 | a | 0 | 0 | 0 | -- ASCII conversion