0
a.C/C# Marshal.PtrToStringAnsi Chinesisch verstümmelt
static void onMessage(IntPtr str)
{
string message = Marshal.PtrToStringAnsi(str);
Console.Write(message);
}
, verstümmelt seine Rückkehr Chinesisch.
b.
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);
}
, Chinesisch-Display, aber die Länge der Zeichenfolge zurückgegeben.
Ich brauche Hilfe!
Wer sendet Ihnen die Zeichenfolge? Eine C-Funktion? Was ist der Inhalt von 'strbuf'? Und die erwartete Zeichenfolge? – xanatos
[UnmanagedFunctionPointer (CallingConvention.StdCall)] public delegate void WriteToConsoleCallback (IntPtr str) ‚‘ SetRecvDataCallback setRecvDataCallback = (SetRecvDataCallback) Marshal.GetDelegateForFunctionPointer (hapi2, typeof (SetRecvDataCallback)); Callback = neu WriteToConsoleCallback (onMessage); setRecvDataCallback (Rückruf); – aiwll
Sie sind Funktionen von nicht-öffentlichen Bibliotheken ... Versuchen Sie, uns den Inhalt von 'strbuf' (in hex) und den gewünschten Text (wenn Sie es wissen) – xanatos