我正在制定一个解决方案,将命令发送到销售点收据打印机,并且在解决命令格式问题时遇到一些问题。我有一个套接字打开设备,这是有效的,因为打印错误的命令。 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)
}
}
数据已经到达,但我认为消息的格式是错误的。任何帮助将不胜感激。
答案 0 :(得分:2)
只需使用您想要的数据创建一个字节(也就是UInt8
)数组
发送,并将其直接传递给write()
的{{1}}方法:
NSOutputStream
请注意,您将 bytes 发送到输出流,而不是十六进制数据。 如果使用十六进制创建数组,则完全没有区别 如上所述的整数文字,或
let cmd: [UInt8] = [0x1B, 0x07]
oStream.write(cmd, maxLength: cmd.count)
数据完全相同。