簡體   English   中英

將具有零字符元素的字符數組轉換為C#字符串

[英]Convert char array with zero-char element to C# string

當我從用C(WinAPI)編寫的非托管代碼接收數據時,它要求保留一定數量的字節並將句柄(指針)傳遞給字符串。 使用Marshal.AllocHGlobal(150)didit。 作為回報,我收到了以'/ 0'-C樣式終止的字符數。 當我使用新的string(charBuff)從此char數組構建字符串時,它不會在'/ 0'點處剪切字符串。 好吧,我可以使用Substring + IndexOf,但是有什么優雅的方法可以使用某些特殊的現有方法來削減它?

好的,我醒來后發現了它。

它的

Marshal.PtrToStringUni(IntPtr)

string MyStringFromWinAPI()
{
string result;
IntPtr strPtr = Marshal.AllocHGlobal(500);
// here would be any API that gets reserved buffer to rerturn string value
SendMessage(camHwnd, WM_CAP_DRIVER_GET_NAME_UNICODE, 500, strPtr);
// now you could follow 2 ways
// 1-st one is long and boring
char[] charBuff = new char[500];
Marshal.Copy(strPtr, charBuff, 0, 500);
Marshal.FreeHGlobal((IntPtr)strPtr);
result = new string(charBuff);
result = result.Substring(0, result.IndexOf('\0'));
return result;
// or more elegant way
result = Marshal.PtrToStringUni(strPtr);
Marshal.FreeHGlobal((IntPtr)strPtr);
return result;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM