【问题标题】:Sending ints over sockets in swift快速通过套接字发送整数
【发布时间】:2014-08-09 17:39:34
【问题描述】:

我正在用一个用 python 编写的服务器端快速编写一个应用程序。 我正在努力以正确的方式发送数据。 假设服务器端被设计为接收一个 int - 这意味着将表示为 '\x00\x00\x00\x05'。

现在假设我的 swift 代码中有一个值为 5 的 int 变量 x。 如何以任何方式对其进行序列化或修改以将其转换为该字符串并通过套接字发送?

【问题讨论】:

  • 如果服务器被设计为接收 int,它很可能期望 5\x05\x00\x00\x00,具体取决于处理器、操作系统和服务器代码。
  • 正确,我的问题是我如何快速到达我发送此数据的位置。
  • 我的建议是使用 C 或 ObjC 桥接器并使用 C 代码。 Swift 甚至还可以直接访问套接字吗?
  • 我目前正在使用 OutputStream.Write 方法发送数据,并且我能够发送一个简单的字符串,但我无法使该字符串以正确的方式表示 int - '\x00\x00\x00\ x05'
  • 花点时间了解字节、整数、数据、字节序。

标签: python ios sockets swift


【解决方案1】:

您需要将数字从小端转换为大端(也称为网络标准顺序)。

var number : UInt32 = 5
var numberBE = number.bigEndian

var data = NSMutableData()
data.appendBytes(&number, length: 4)
println(data) // <05000000>

var dataBE = NSMutableData()
dataBE.appendBytes(&numberBE, length: 4)
println(dataBE) // <00000005>

【讨论】:

  • 这是我现在得到的结果。问题在于,如果我在套接字上发送它,那么 '' 也在发送,并且当我在 python 中看到它时不会添加 \x。
  • '' 只是描述方法的产物。您要发送的是字节。数据正好有 4 个字节。获取指向字节的指针:data.bytes.
猜你喜欢
  • 1970-01-01
  • 2014-09-01
  • 1970-01-01
  • 2021-01-31
  • 2018-10-06
  • 2021-09-13
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
相关资源
最近更新 更多