其他分享
首页 > 其他分享> > C CLI结构到字节数组

C CLI结构到字节数组

作者:互联网

我有一个代表有线格式数据包的结构.在这种结构中是其他结构的阵列.我有通用代码可以很好地处理大多数情况,但是这种结构数组的情况是将编组器抛出一个循环.

不安全的代码是行不通的,因为我无法获得带有数组的结构的指针(argh!).

我从this codeproject article可以看到,有一个非常不错的,涉及C/C++LI的通用方法,类似于…

public ref class Reader abstract sealed
    {
    public:
        generic <typename T> where T : value class
        static T Read(array<System::Byte>^ data)
        {
            T value;

            pin_ptr<System::Byte> src = &data[0];
            pin_ptr<T> dst = &value;

            memcpy((void*)dst, (void*)src,
                /*System::Runtime::InteropServices::Marshal::SizeOf(T::typeid)*/
                sizeof(T));

            return value;
        }
    };

现在,只要具有结构->字节数组/作者版本,我要设置!提前致谢!

解决方法:

如果不控制结构的字节打包,则使用memcpy将字节数组复制到结构中是非常危险的.一次在一个字段中编组和解组一个结构会更安全.当然,您将失去所提供示例代码的通用功能.

但是要回答您的真实问题(并考虑以下伪代码):

public ref class Writer abstract sealed
    {
    public:
        generic <typename T> where T : value class
        static System::Byte[] Write(T value)
        {
            System::Byte buffer[] = new System::Byte[sizeof(T)]; // this syntax is probably wrong.
            pin_ptr<System::Byte> dst = &buffer[0];
            pin_ptr<T> src = &value;

            memcpy((void*)dst, (void*)src,
                /*System::Runtime::InteropServices::Marshal::SizeOf(T::typeid)*/
                sizeof(T));

            return buffer;
        }
    };

标签:struct,c-cli,marshalling,c
来源: https://codeday.me/bug/20191108/2004722.html