swift - 直接编写二进制文件,如Python

时间:2017-05-08 01:53:27

标签: python ios swift3 hex

在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)
    }
}

1 个答案:

答案 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)