二进制值字符串到二进制文件
String of Binary Values to Binary File
我有一个很大的二进制位字符串(~600 字节),我需要将其保存到二进制文件中。
如果我只是使用 String.write
将字符串保存到文件中,那么 1 和 0 将被编码为它们的 Unicode/ASCII 值。
我需要它,这样如果我用 xxd -b
打开文件,它会输出与我当前在字符串中相同的二进制位。
我怎样才能做到这一点?
如果你有一个包含一系列“0”和“1”字符的字符串,并且想要二进制表示,你可以这样做:
extension String {
var binaryData: Data {
let values = try! NSRegularExpression(pattern: "[01]{8}")
.matches(in: self, range: NSRange(startIndex..., in: self))
.compactMap { Range([=10=].range, in: self) }
.compactMap { self[[=10=]] }
.compactMap { UInt8([=10=], radix: 2) }
return Data(values)
}
}
因此
let input = "010000010100001001000011"
let data = input.binaryData // 0x41 0x42 0x43
然后您可以将 Data
写入文件,或者用它做任何您想做的事情。
我有一个很大的二进制位字符串(~600 字节),我需要将其保存到二进制文件中。
如果我只是使用 String.write
将字符串保存到文件中,那么 1 和 0 将被编码为它们的 Unicode/ASCII 值。
我需要它,这样如果我用 xxd -b
打开文件,它会输出与我当前在字符串中相同的二进制位。
我怎样才能做到这一点?
如果你有一个包含一系列“0”和“1”字符的字符串,并且想要二进制表示,你可以这样做:
extension String {
var binaryData: Data {
let values = try! NSRegularExpression(pattern: "[01]{8}")
.matches(in: self, range: NSRange(startIndex..., in: self))
.compactMap { Range([=10=].range, in: self) }
.compactMap { self[[=10=]] }
.compactMap { UInt8([=10=], radix: 2) }
return Data(values)
}
}
因此
let input = "010000010100001001000011"
let data = input.binaryData // 0x41 0x42 0x43
然后您可以将 Data
写入文件,或者用它做任何您想做的事情。