Byte[]数组和array<unsigned char>^是同类型。
用System::Runtime::InteropServices::Marshal类,有PtrToStructure、PtrToStringAnsi等方法,就是没有转换为托管字节数组的方法,请问怎么解决?
如果先转换为字符串,再转换为字节数组,显得太繁琐了
------解决方案--------------------
网上找的,参考:
- C# code
//将非托管的ANSI字符串转换成托管字符串 String^ UnmanagedStringA2ManagedString(char* pIn) { return Marshal::PtrToStringAnsi(static_cast<IntPtr>(pIn)); } //将托管字符串转换成非托管的ANSI字符串 char* ManagedString2UnmanagedStringA(String^ strIn) { IntPtr ip = Marshal::StringToHGlobalAnsi(strIn); const char* pTemp = static_cast<const char*>(ip.ToPointer()); char *pOut = new char[strlen(pTemp)+1]; strcpy(pOut, pTemp); Marshal::FreeHGlobal(ip); return pOut; }
------解决方案--------------------
用这个Intprt作为参数,之后转换为byte[].
转换方法:
用Unsafe,指针操作;
或用Marshal.Copy