请考虑以下C ++ / CLI代码:
typedef unsigned __int8 uint8_t;
...
uint8_t unmanaged_buf[MAVLINK_MAX_PACKET_LEN];
array<uint8_t>^ Buffer;
...
Marshal::Copy((IntPtr)unmanaged_buf, Buffer, 0, len);
以下是使用的Marshal :: Copy()方法吗?
Marshal::Copy Method (IntPtr, array<Byte>, Int32, Int32)
PS:上述方法的MSDN网址位于:http://msdn.microsoft.com/en-us/library/ms146631.aspx
如果是,是因为Byte
是最接近unsigned __int8
的类型吗?具体来说,Visual C ++编译器如何确定使用哪个方法重载?
答案 0 :(得分:4)
来自MSDN documentation about __int8
:
类型
__int8
,__int16
和__int32
是具有相同大小的ANSI类型的同义词,对于编写跨多个平台的行为相同的可移植代码非常有用。__int8
数据类型与类型char
同义,...
这并没有说明unsigned
版本的类型,但我认为假设unsigned __int8
与unsigned char
是同义词是有意义的。
来自.NET Framework Equivalents to C++ Native Types:
下表显示了内置Visual C ++类型的关键字,它们是System命名空间中预定义类型的别名。
unsigned char
:System.Byte
将这些放在一起,unsigned __int8
与System.Byte
的别名同义,这意味着它与C ++ / CLI代码中的System.Byte
相同。