Swift通过TCP套接字发送十六进制数据

时间:2016-07-06 18:30:01

标签: swift sockets tcp hex

我正在制定一个解决方案,将命令发送到销售点收据打印机,并且在解决命令格式问题时遇到一些问题。我有一个套接字打开设备,这是有效的,因为打印错误的命令。 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)
        }
    }

数据已经到达,但我认为消息的格式是错误的。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

只需使用您想要的数据创建一个字节(也就是UInt8)数组 发送,并将其直接传递给write()的{​​{1}}方法:

NSOutputStream

请注意,您将 bytes 发送到输出流,而不是十六进制数据。 如果使用十六进制创建数组,则完全没有区别 如上所述的整数文字,或

let cmd: [UInt8] = [0x1B, 0x07]
oStream.write(cmd, maxLength: cmd.count)

数据完全相同。