【问题标题】:What is the canonical way to create network packets in Objective C?在 Objective C 中创建网络数据包的规范方法是什么?
【发布时间】:2013-03-07 19:23:39
【问题描述】:

来自 python 我可以做这样的事情。

values = (1, 'ab', 2.7)
s = struct.Struct('I 2s f')
packet = s.pack(*values)

我可以用 python 非常简单地将任意类型打包在一起。在 Objective C 中执行此操作的标准方法是什么?

【问题讨论】:

  • 你查看NSData了吗?
  • 不,我没有。我会去的,谢谢。

标签: objective-c network-programming packets


【解决方案1】:

使用 C 结构是正常的方法。例如:

typedef struct {
    int a;
    char foo[2];
    float b;
} MyPacket;

将为 int、2 个字符和一个 float 定义一个类型。然后,您可以将这些字节解释为用于写入的字节数组:

MyPacket p = {.a = 2, .b = 2.7};
p.foo[0] = 'a'; 
p.foo[1] = 'b';

char *toWrite = (char *)&p; // a buffer of size sizeof(p)

【讨论】:

  • 另一个答案也有好处;可以使用 struct packing/alignment/padding 来控制布局,以及位宽说明符等。
【解决方案2】:

不是很清楚的问题,但也许您正在寻找(打包的结构)?

__attribute__((packed)) struct NetworkPacket {
    int integer;
    char character;
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-11
    • 2021-04-13
    • 2013-06-18
    • 1970-01-01
    • 1970-01-01
    • 2010-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多