0
a。C/C#Marshal.PtrToStringAnsi中文亂碼
static void onMessage(IntPtr str)
{
string message = Marshal.PtrToStringAnsi(str);
Console.Write(message);
}
,其返回中國亂碼。
灣
public static void onMessage(IntPtr str)
{
int nAnsiLength = Marshal.PtrToStringAnsi(str).Length;
int nUniLength = Marshal.PtrToStringUni(str).Length;
int nMaxLength = (nAnsiLength > nUniLength) ? nAnsiLength : nUniLength;
int length = 0;//循環查找字符串的長度
for (int i = 0; i < nAnsiLength; i++)
{
byte[] strbuf1 = new byte[1];
Marshal.Copy(str + i, strbuf1, 0, 1);
if (strbuf1[0] == 0)
{
break;
}
length++;
}
byte[] strbuf = new byte[length];
Marshal.Copy(str, strbuf, 0, length);
string message = System.Text.UTF8Encoding.UTF8.GetString(strbuf);
}
,中國顯示器,但是字符串的長度返回。
我需要幫助!
誰給你的字符串?一個C函數? 'strbuf'的內容是什麼?預期的字符串? – xanatos
[UnmanagedFunctionPointer(CallingConvention.StdCall)] 公共委託無效WriteToConsoleCallback(IntPtr的STR)「」 SetRecvDataCallback setRecvDataCallback = (SetRecvDataCallback)Marshal.GetDelegateForFunctionPointer(hapi2的typeof(SetRecvDataCallback)); callback = new WriteToConsoleCallback(onMessage); setRecvDataCallback(callback); – aiwll
它們是非公共圖書館的功能...嘗試給我們提供'strbuf'(十六進制)和需要的文本內容(如果你知道的話) – xanatos