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

标签 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)
        }
    }

数据正在到达那里,但我认为消息的格式有误。任何帮助将不胜感激。

最佳答案

只需用您想要的数据创建一个字节(又名 UInt8)数组 发送,并将其直接传递给 NSOutputStreamwrite() 方法:

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/

相关文章:

swift - iPhone X、iPhone XS 等相机变焦问题

swift - 一起使用 queryEqual 和 queryEnding 吗?

ios - TableView 单元格在引用它们的 TableView 被释放后不会被释放

swift - 如何在不获取 "Fatal error: Index out of range"的情况下在 IndexPath 0 添加按钮/默认 UICollectionViewCell

javascript - 等待来自 Async 、 Protractor 、 nodejs 的响应

java - Java套接字-关闭与服务器套接字的telnet客户端连接

c++ - struct constructor会占用struct空间内的空间吗?

wcf - 更改 WCF net.tcp 绑定(bind)上的套接字选项

php - 我需要一个脚本/应用程序来保持 PHP 前端的 TCP 连接

java - 在套接字中发送停止消息