我正在研究一个解决方案,将命令发送到销售点收据打印机,但在正确设置命令格式方面遇到了一些问题。我为设备打开了一个套接字并且可以正常工作,因为打印了不正确的命令。 SPEC 在此命令中要求的是发送以下内容:
1B 07 或十进制的 27 7. 在 ASCII 中是 ESC_KEY BEL。规范显示的唯一示例是针对 .NET 的:
MSComm1.Output = Chr$(&H1B) & Chr$(&H07)
我一直在尝试:
//之前使用 CFStreamCreatePairWithSocketToHost 打开套接字。
var cmd = "27 07"
if let dataString = "\(cmd)\r".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false), let oStream = self.outputStream {
self.outputData.append(dataString)
if oStream.hasSpaceAvailable {
oStream.write(UnsafePointer((self.outputData.first! as NSData).bytes), maxLength: self.outputData.first!length)
}
}
数据正在到达那里,但我认为消息的格式有误。任何帮助将不胜感激。
最佳答案
只需用您想要的数据创建一个字节(又名 UInt8
)数组
发送,并将其直接传递给 NSOutputStream
的 write()
方法:
let cmd: [UInt8] = [0x1B, 0x07]
oStream.write(cmd, maxLength: cmd.count)
请注意,您将字节 发送到输出流,而不是十六进制数据。 如果您使用十六进制创建数组,则完全没有区别 如上所述的整数文字,或
let cmd: [UInt8] = [27, 7]
数据完全一样。
关于Swift 通过 TCP 套接字发送十六进制数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38231244/