不確定我完全明白你想要做什麼。 但是,由於您不想混淆非託管緩衝區,爲什麼不替換非託管緩衝區中的字符串而不將其轉換爲託管字符串(並返回)呢?
只要字符串由'\ 0'(標準C字符串)分隔,您就可以查找要替換的字符串(例如「XYZ123」)。你可以自己做(走成炭串字符,用指針運算),或者你甚至可以P /調用
LPTSTR StrStr(
LPCTSTR lpFirst,
LPCTSTR lpSrch
);
從SHLWAPI.DLL
一旦你找到了指向字符串(「XYZ123 「)你可以用類似的東西代替它:
LPTSTR StrCpy(
LPTSTR psz1,
LPCTSTR psz2
);
或者再次,自己實現它。
注:上述功能有安全的選擇。請參閱:Security Considerations: Microsoft Windows Shell
以下示例顯示如何使用不安全的代碼和IntPtr。它可能有所幫助:
public unsafe static void Main()
{
int a = 10;
Console.WriteLine("a is {0} ({0:X})", a);
IntPtr ip = new IntPtr(&a);
byte* pTarget = (byte*)ip.ToPointer() + 1;
*pTarget = 2;
Console.WriteLine("a is {0} ({0:X})", a);
}
編輯:我假設兩個字符串是相同的長度。 (因爲他們在你的例子)