试图找到将Swift中的ASCII字符写成单个字符串的最短/最紧凑的方法。例如,在JavaScript中,您可以用'\x00'
来表示ASCII中等于0的十进制数,也可以编写'\0
,后者要短2个字符。因此,如果这些字符很多,则文件大小要小2倍。
想知道如何在Swift中将ASCII字符0-31和127写入到单个字符串中,以使它们最小。在JavaScript中,这种外观如下:
'\0...\33abcdef...\127¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½...'
答案 0 :(得分:3)
通常,您将使用\u{x}
,其中x
是十六进制值。对于您,\u{0}
至\u{1f}
和\u{7f}
。
与基于C的语言一样,Swift字符串也支持\0
表示“ null”,\t
表示“ tab”,\n
表示“ newline”和\r
表示支持“回车”。与C不同,Swift不支持\b
或\f
。
如果您要创建单个String
,将全部使用128个ASCII字符,则可以执行以下操作:
let ascii = String(Array(0...127).map { Character(Unicode.Scalar($0)) })
答案 1 :(得分:1)
如果您有很多这样的字符,可以将它们放在Data对象中,然后将其转换为字符串:
let data = Data(bytes: Array(0...31) + [127])
let text = String(data: data, encoding: .utf8)!
根据您的评论,您可以执行以下操作:
let tab = Data(bytes: [9])
let null = Data(bytes: [0])
let data = "abc".data(using: .utf8)! + tab + null + "morechars".data(using: .utf8)! + tab