转换ASCII十进制

时间:2016-02-10 18:56:28

标签: swift postgresql ascii

我从数据库中收到两个等效字符串,具体取决于我是以二进制还是文本格式请求它。

二进制是十六进制的...... 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 *)返回。

非常感谢任何见解。

1 个答案:

答案 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