将c++代码转换为c#

Convert C++ code to C#

本文关键字:转换 代码 c++      更新时间:2023-10-16

我用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等是struct,它们被转换成c#。var szTempString包含奇怪的数据。我是否正确转换了pData和函数memcpy ?
谢谢。
PS.这是WinPkFilter库。也许有人在c#中使用了它?

。. NET的char实际上是unicode,不像c++。至少应该将char替换为byte。然后,当你最终想要一个来自字节的字符串时,使用Encoding类,像这样:Encoding. default . getstring (bytes)…

您是否添加了[StructLayout(LayoutKind.)]顺序的,包=1)]在你的结构?