【问题标题】:How can I create C-style structs in Clojure?如何在 Clojure 中创建 C 风格的结构?
【发布时间】:2012-05-04 06:03:15
【问题描述】:

我正在尝试在 Clojure 中创建 C 风格的结构,因此我可以从 Clojure 调用文档记录不佳的 C++ API。

该 API 旨在发送和接收序列化的 protobuf 消息(好的),前面是 C Header 结构(坏的)。初始握手是一个 RPCHandshakeHeader 结构体,其过程大致在下面的代码中描述:

struct RPCHandshakeHeader {
    char magic[8];
    int version;

    static const char REQUEST_MAGIC[9];
    static const char RESPONSE_MAGIC[9];
};
[...snip...]

const char RPCHandshakeHeader::REQUEST_MAGIC[9] = "FooBar?\n";
[...snip...]

RPCHandshakeHeader header;
memcpy(header.magic, RPCHandshakeHeader::REQUEST_MAGIC, sizeof(header.magic));
header.version = 1;

socket = new CActiveSocket();
socket->Initialize();
socket->Open((const uint8 *)"localhost", 5000);

socket->Send((uint8*)&header, sizeof(header));
[...code to read response...]

如何在 clojure 中执行此操作?我需要使用 JNA/JNI 吗?

有没有办法创建一个 C 结构,将其转换为二进制并通过套接字发送? (我认为这是我需要做的)

【问题讨论】:

    标签: c++ sockets clojure struct


    【解决方案1】:

    听起来像是gloss 的工作!我不知道这部分API的细节,但是你想特别看compile-framerepeated的字符串。

    【讨论】:

    • 好答案!我唯一的亮点是不支持小端,虽然不难做一个端交换功能。谢谢:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-21
    相关资源
    最近更新 更多