将 ASCII 反序列化为结构

de-serialize ASCII to struct

如果要从网络接收消息,我想出了以下结构来声明各种格式:

#include <stdint.h>
#include <iostream>
#include <string.h>


template<int T>
struct uint
{
    static uint<T> create(uint64_t value)
    {
        uint<T> r = {value};
        return r;
    }

    uint(uint64_t value)
    {
        v = value;
    }
    uint()
    {}

    uint<T>& operator =(uint64_t value)
    {
        v = value;
        return *this;
    }

    operator uint64_t() const
    {
        return (uint64_t)v;
    }

    unsigned long long v:T;
}__attribute__((packed));

示例:

typedef uint<5> second_t;

假设其中一种消息格式(通过某些过程自动生成)如下所示:

struct seconds
{
    char _type;
    second_t _second;
} __attribute__((packed));

现在假设我想使用字符串填充上述消息的实例:

int main()
{
 seconds ii;
 const char *i = "123456";
// memset, memcpy,sprintf... ??? what to use here?
 std::cout << ii._type << "  " << ii._second << std::endl;
}

给定流 123456,我希望 seconds (ii) 结构的实例具有 char ii._type = '1' 和整数 ii._second = 23456。但我不知道该怎么做。你知道我该怎么做吗?你对如何改进基本结构有什么建议吗?

谢谢

您有许多更简单、更可靠的选项,几乎不需要任何工作。

检查 google 协议缓冲区(平台无关的消息序列化和反序列化):https://developers.google.com/protocol-buffers/

或 boost::serialization -(可能更快,但不依赖于平台)http://www.boost.org/doc/libs/1_58_0/libs/serialization/doc/index.html