C++ Code in C# übertragen (Pointer und #define)



  • Hey,

    ich habe ein C++ Code vorliegen, der eine CRC16 einer Struktur errechnet.
    Dabei wandert der Pointer auf die struct Byte für Byte über die struct, um so dann die Postion zu errechnen, um die entsprechende Prüfsumme aus der Tabelle herauszufinden.

    Also:

    #define Data(x) (*(DATA*)pVoid)[x]
    
    WORD CRC(void* pVoid, WORD Sum, WORD Count)
    {
        BYTE Pos;
        for (WORD i=0; i < Count; i++)
        {
            Pos = (BYTE)(HIBYTE(Sum) ^ Data(i));
            ...
    

    Meine Frage: Wie kann ich das am besten in C# übertragen ?
    Das einzige Problem ist eben noch das "Wandern" des Pointers über die Struktur byte für byte !

    Kann ich das irgendwie über die Marshal-Klasse oder... machen ?

    Brauche Hilfe dazu !



  • Willst Du nicht besser eine C# Lösung finden um den CRC zu berechnen?
    Simon

    Edit:
    Ev. hilft das:
    http://www.codeplex.com/clrinterop



  • Hi,

    oh ok, stimmt, du hattest mir den Link schonmal gegeben !
    Hatte jetzt garnicht an das Tool gedacht !

    Aber ich hab vor ein paar Minuten es anders gelöst:
    Eben die selbe Variante, nur dass ich darüber:

    private byte[] ByteArrayFromStruct(object obj)
    {
        int length = Marshal.SizeOf(obj);
        byte[] array = new byte[length];
    
         IntPtr ptr = Marshal.AllocHGlobal(length);
         Marshal.StructureToPtr(obj, ptr, true);
         Marshal.Copy(ptr, array, 0, length);
         Marshal.FreeHGlobal(ptr);
    
         return array;
    }
    

    mir aus der Struktur ein byte-Array generiere und dann darüber die Position für die Tabelle errechne !

    Funktioniert !

    Aber trotzdem danke für deine Hilfe ! 👍
    Schönen Tag noch !


Anmelden zum Antworten