我有代碼上C++寫道:轉換C++代碼,以C#
char szTempString[1500];
DWORD dwDataLength = PacketBuffer.m_Length - (sizeof(ether_header) + pIpHeader->ip_hl*4 + pTcpHeader->th_off*4);
PCHAR pData = (PCHAR)pEthHeader + (sizeof(ether_header) + pIpHeader->ip_hl*4 + pTcpHeader->th_off*4);
// If packet contains any data - process it
if (dwDataLength)
{
//
// Copy packet payload into the temporary string
//
memcpy (szTempString, pData, dwDataLength);
C#:
char[] szTempString = new char[1500];
var dwDataLength = (int)PacketBuffer.m_Length -
(Marshal.SizeOf(typeof (ETHER_HEADER)) + (pIpHeader->IPLenVer & 0xF)*4 + (pTcpHeader->Off & 0xF)*4);
var pData = (IntPtr)pEthHeader + (Marshal.SizeOf(typeof(ETHER_HEADER)) +
(pIpHeader->IPLenVer & 0xF) * 4 + (pTcpHeader->Off & 0xF) * 4);
if(dwDataLength != 0)
{
Marshal.Copy(pData,szTempString, 0, dwDataLength);
Console.WriteLine(szTempString);
}
ehter_header,pIp_header和另一個結構,它們被轉換爲C#。 var szTempString包含奇怪的數據。我是否正確地轉換了pData和函數memcpy?
謝謝。 PS:這是WinPkFilter庫。也許有人用它在C#中?
我不知道C#所以這可能是無關的,但'pData'在C++代碼被視爲'char *',並且看起來像在C#代碼中被視爲「int *」。當你做指針算術時,這是兩個完全不同的東西。 – Mat 2011-04-25 07:17:12
你可以看看這個[鏈接](http://stackoverflow.com/questions/2559308/using-marshal-copy-correctly)。它討論如何正確使用Marshal.Copy。此外[1](http://forum.soft32.com/pda/Marshal-Copy-char-includes-terminating-null-ftopict49073.html)也可能有用。 – 2011-04-25 07:13:10