1

请考虑以下 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 URL在:http: //msdn.microsoft.com/en-us/library/ms146631.aspx

如果是,是因为Byte是最接近的类型unsigned __int8吗?具体来说,Visual C++ 编译器如何确定使用哪个方法重载?

4

1 回答 1

4

MSDN 文档中关于__int8

types __int8__int16__int32是 A​​NSI 类型的同义词,它们具有相同的大小,对于编写跨多个平台行为相同的可移植代码很有用。数据类型与__int8type 同义char,...</p>

这并没有说明unsigned类型的版本,但我认为假设它unsigned __int8unsigned char.

.NET Framework Equivalents 到 C++ Native Types

下表显示了内置 Visual C++ 类型的关键字,它们是 System 命名空间中预定义类型的别名。

unsigned charSystem.Byte

把它放在一起,unsigned __int8是 的别名的同义词System.Byte,这意味着它与System.ByteC++/CLI 代码中的相同。

于 2013-06-23T19:10:56.303 回答