我有一个代表有线格式数据包的结构.在这种结构中是其他结构的阵列.我有通用代码可以很好地处理大多数情况,但是这种结构数组的情况是将编组器抛出一个循环.
不安全的代码是行不通的,因为我无法获得带有数组的结构的指针(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;
}
};