开发者

C++ equivalent of PHP's pack()

开发者 https://www.devze.com 2022-12-24 04:56 出处:网络
My question is simple. Is there an equivalent of PHP\'s pack() and unpack() function in the C++开发者_如何转开发 STL?

My question is simple.

Is there an equivalent of PHP's pack() and unpack() function in the C++开发者_如何转开发 STL? If no, is there an alternative to achieve the same goal?

https://www.php.net/pack

Thanks.


If your goal is serializing data, you can use Google protocol buffers to achieve it.

http://code.google.com/apis/protocolbuffers/


A while back I wrote a small a library in C that does this functionality. I placed my code on Google code here: code.google.com/p/packlib/


There is no serialization mechanism in the STL. Depending on what you want to do you could either use a library such as the one in Boost or you could write your own serialization code, which can be a viable alternative especially if your data is rather simple.


Structs are very much like the unpack function within PHP.

These pieces of code, are basically equivalent.

PHP:

define('ISP_TINY', 4);
class IS_TINY
{
    const PACK = 'CCCC';
    const UNPACK = 'CSize/CType/CReqI/CSubT';

    public $Size = 4;
    public $Type = ISP_TINY;
    public $ReqI;
    public $SubT;

    public function __construct($rawPacket)
    {
        $pkClass = unpack($this::UNPACK, $rawPacket);
        foreach ($this as $property => $value)
        {
            $this->$property = $pkClass[$property];
        }
    }
}

C++:

#define ISP_TINY = 4;
struct IS_TINY // General purpose 4 byte packet
{
    byte Size; // Always 4
    byte Type; // Always ISP_TINY
    byte ReqI;
    byte SubT;
};


A while ago I needed the same functionality so I wrote a single-header library for this. It supports most of the functionality from php's pack() / unpack(). The library is available on github here.

0

精彩评论

暂无评论...
验证码 换一张
取 消