快速将字符串转换为数据缓冲区

时间:2018-12-30 01:56:02

标签: swift macos binary buffer

我有一个热敏打印机的套接字连接,我可以读取txt文件的内容并将其写入套接字。我的问题是此文件包含作为POS POS命令的十六进制值的混合。即 1x product 0x0A 0x0A(0x0A代表特定的ESC POS命令)。

我想在Swift中将文本文件转换为Node JS样式的Buffer数据类型。我尝试过将文件转换为数据类型,但是没有运气。

let binary = Data([0x1b, 0x64, 0x04, 0x1b, 0x64, 0x04, 0x1d, 0x56, 
                   0x00, 0x1b, 0x40])
# Returns 11 Bytes

let content = "0x1b, 0x64, 0x04, 0x1b, 0x64, 0x04, 0x1d, 0x56, 0x00, 
               0x1b, 0x40".data(using: .utf8)
# Returns Optional(64 bytes)

如何将内容转换为与二进制相同的类型?

1 个答案:

答案 0 :(得分:0)

将字符串转换为字节将执行以下步骤:

  1. 用子字符串“,”
  2. 分割字符串
  3. 删除0x前缀
  4. 将十六进制表示形式转换为UInt8 s
  5. UInt8的数组转换为Data

代码如下:

let content = "0x1b, 0x64, 0x04, 0x1b, 0x64, 0x04, 0x1d, 0x56, 0x00, 0x1b, 0x40"
let bytes = content.components(separatedBy: ", ") // step 1
    .map { UInt8($0.dropFirst(2) /* step 2*/, radix: 16)! /* step 3 */ }
let data = Data.init(bytes) // step 4

print(data)