【问题标题】:swift - Writing binary directly, like Pythonswift - 直接编写二进制文件,如 Python
【发布时间】:2017-05-08 01:53:27
【问题描述】:

在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 中:(我需要填写 nil)

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

【问题讨论】:

  • 向我们展示一些反映您的问题的代码示例
  • 我很确定您可以编写 c 级代码。不确定二进制。
  • @user3441734 使用代码 sn-ps 更新。
  • WebSocket 来自哪里?它的 .send() 函数的签名是什么?
  • 如果您在谈论github.com/daltoniam/Starscream/blob/master/Source/…,则没有定义发送函数。

标签: python ios swift3 hex


【解决方案1】:

来自红蜘蛛

/**
     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)

【讨论】:

    猜你喜欢
    • 2017-11-29
    • 2013-05-13
    • 2014-01-24
    • 2012-02-12
    • 1970-01-01
    • 2013-08-24
    • 2012-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多