字符串和指针转换
原创2024年2月28日小于 1 分钟
字符串转指针
Marshal
引用using System.Runtime.InteropServices;
,具体查看C++提供的字符集编码
using System.Runtime.InteropServices;
var str = "Hello World";
var strPtr=Marshal.StringToHGlobalUni(str);
Marshal.Copy
using System.Runtime.InteropServices;
var str = "Hello World\0";
var byteStr = Encoding.Unicode.GetBytes(str);
IntPtr strPtr = Marshal.AllocHGlobal(byteStr.Length);
Marshal.Copy(byteStr, 0, strPtr, byteStr.Length);
指针转字符串
Marshal.PtrToStringUni
using System.Runtime.InteropServices;
var str = "Hello World";
var strPtr=Marshal.StringToHGlobalUni(str);
var readStr = Marshal.PtrToStringUni(strPtr);
Console.WriteLine(readStr)
Encoding
using System.Runtime.InteropServices;
var str = "Hello World";
var strPtr=Marshal.StringToHGlobalUni(str);
byte[] bytes = new byte[22];
Marshal.Copy(strPtr, bytes, 0, 22);
var readStr = Encoding.Unicode.GetString(bytes);
Console.WriteLine(readStr)
同理,其他类型也可以通过Marshal.Copy
进行二进制编码转换