在Python中,你可以像这样直接写成十六进制; \x00\x01\x02
。对于我的项目,我需要能够在Swift 3中做同样或类似的事情;我基本上是通过websocket进行通信,我必须发送字节字符串,其值为0x01或0x13,这些值没有等效的打印字符。
命令的格式将用Python表示; \x25\x00\x00\x01\x00
,其中单个字节不仅是命令而是参数。出于这个原因,我需要能够附加类似字符串而不会影响另一个字节。
我一直在寻找,我曾经找到一个名为Byte()的Swift类,但是对于我的生活,我无法弄清楚如何使用它。此外,我见过的很多教程都是基于接收字节数据或将字符串转换为二进制,这是我不能做的。
感谢您的帮助。
编辑:根据要求,这是我正在尝试做的一个例子;
在Python中:(这可行)
import socket
sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.connect(('localhost','8080'))
payload = b'\x25\x00\x00\x01\x00'
sock.send(payload)
resp = sock.recv(100)
print resp
在Swift中:(我需要填写零)
import UIKit
import Starscream
class ViewController: UIViewController, WebSocketDelegate{
var socket: WebSocket = WebSocket(url: URL(string: "localhost:8080")!)
// ... viewDidLoad, didReceiveMemoryWarning, and
// Starscream functions like websocketDidConnect
@IBAction func sendMessage(_ sender: UIButton){
var payload = nil //I need to write payload in Python above here
socket.write(payload)
}
}
答案 0 :(得分:0)
/**
Write binary data to the websocket. This sends it as a binary frame.
If you supply a non-nil completion block, I will perform it when the write completes.
- parameter data: The data to write.
- parameter completion: The (optional) completion handler.
*/
open func write(data: Data, completion: (() -> ())? = nil) {
guard isConnected else { return }
dequeueWrite(data, code: .binaryFrame, writeCompletion: completion)
}
基于此,你必须
let data = Data(bytes: [UInt8(25),0,1,2,0,255,0xAB]) // create data b'\x25\x00\x01\x02\x00\xFF\xAB'
sock.write(data: data)