我在这里经历了很多问题,但似乎没有一个问题适合我。我只想将我的字符串转换为UTF-32字符串。如图像
中所示var str = "Your"
let dataenc = str.data(using: String.Encoding.utf32)
extension Data {
func hexEncodedString() -> String {
return map { String(format: "%04hhx", $0) }.joined()
}
}
let data = str.data(using: .utf16)!
let hexString = data.map{ String(format:"%02x", $0) }.joined()
print(data.hexEncodedString())
print(hexString)
这不起作用
我得到的输出是
00ff00fe00590000006f00000075000000720000
fffe59006f0075007200
不知道该怎么做。提前谢谢。
答案 0 :(得分:1)
要获得相同的结果,您需要使用.utf32BigEndian
字符串编码。
extension Data {
func hexEncodedString() -> String {
return map { String(format: "%02x", $0) }.joined()
}
}
var str = "Your"
let dataenc = str.data(using: .utf32BigEndian)!
print(dataenc.hexEncodedString())
输出:
000000590000006f0000007500000072
请注意,当仅使用.utf32
时,字符串“Your”会获得20个字节,但使用.utf32BigEndian
时,只能获得相同字符串的16个字节。那些额外的4个字节代表“BOM”(字节顺序标记)。在您的情况下,使用.utf32
的结果为您提供了“little-endian”格式的数据,并在数据的开头添加了“BOM”。这就是为什么数据以额外的00ff00fe
(BOM)开始,接下来的4个字节中的每一个都以错误的顺序出现。
明确说明.utf32BigEndian
将字节按所需顺序排列并消除BOM。