我已經定義了下列方法:NUL字符在C#
internal string GetInformation(string recordInformation)
{
int bufferSize = GetBufferSize(recordInformation);
string outputRecord;
IntPtr output = Marshal.AllocHGlobal(bufferSize);
try
{
_returnCode = UnmanagedMethod(recordInformation, output, recordInformation.Length);
byte[] outputData = new byte[bufferSize];
Marshal.Copy(output, outputData, 0, bufferSize);
outputRecord = ASCIIEncoding.ASCII.GetString(outputData, 0, bufferSize);
}
finally
{
Marshal.FreeHGlobal(output);
}
return outputRecord;
}
在該方法中,提供的字符串(recordInformation)被傳遞到寫入C(UnmanagedMethod)的方法。根據我對這個方法的文檔,bufferSize設置正確;但是,Marshal.Copy會創建一個大小爲recordInformation.Length的數組。當我將ray分配給outputRecord變量時,字符串的內容是bufferSize的長度;然而,有多個NUL(Char 0)來填充字符串的其餘部分,直到它到達recordInformation.Length字段。如果我將UnmanagedMethod參數列表中的最後一個參數更改爲bufferSize,則輸出字符串將變成除NUL字符之外的任何內容。
我在做的編組錯誤或有沒有一種方法後,從字節數組中創建字符串以刪除NUL字符?
謝謝
你使用什麼非託管方法?如果沒有能夠閱讀原生規格,很難說元帥的最佳方式是什麼。 它是一種API方法,還是自定義的東西? – 2009-07-07 17:31:19
非託管方法是來自第三方API的方法。 API文檔全部在C中,方法簽名(在C中)是'int UnmanagedMethod(char * inputstring,char * outputstring,int inputlength)'。除了字符串末尾的NUL字符之外,正在正確創建outputRecord字符串。 – JamesEggers 2009-07-07 17:35:27