我在使用C#中的Marshal类进行实验,对这个操作的结果有些困惑:
string someVal = "Hello There";
IntPtr ptS = Marshal.StringToHGlobalAnsi(someVal);
char* ptsPt = (char*)ptS.ToPointer();
在立即窗口查看ptsPt[0]的值为'效',我猜测这与StringToHGlobalAnsi方法将托管的字符视为8位值有关,而它们实际上是16位。但是我不太明白为什么会发生这种情况。 我知道可以通过将其更改为StringToHGlobalUni来解决此问题。但我不明白为什么会这样!祝好。
byte* ptS
和(char)(ptS[0])
。 - Danny Varod