Ich habe einige C++ - Code, den ich in C# konvertieren möchte, aber ich verstehe nicht vollständig, was passiert.Konvertieren von C++ in C#: Übergeben Zeiger auf Funktionen
Hier ist der C++ Code:
BYTE buffer[150]; // byte is of type ‘unsigned char’
int i;
checksum = 0;
for (i = 0; i < count; i++)
checksum += HexToByte(&buffer[2 + i * 2]);//HOW DO I PASS THIS ARGUMENT
checksum = ~checksum;
BYTE HexToNibble(BYTE HexChar){
if ((HexChar >= 48) && (HexChar <= 57)) return HexChar - 48;
if ((HexChar >= 65) && (HexChar <= 70)) return HexChar - 55;
if ((HexChar >= 97) && (HexChar <= 102)) return HexChar - 87;
return 0;
}
BYTE HexToByte(BYTE* HexPtr){
return HexToNibble(HexPtr[0]) * 0x10 + HexToNibble(HexPtr[1]); //AND USE THE ARGUMENT LIKE THIS
}
Meine Verwirrung in Bezug auf ist, wie die 'HexToByte' Funktion den Zeiger verwendet. Es sieht so aus, als würden wir einen Zeiger auf einen bestimmten Index des Pufferarrays übergeben, aber dann fortfahren, es so zu verwenden, als wäre es immer noch ein Array?
Bei der Konvertierung in C# -Code bin ich nicht sicher, was der Parameter für die HexToByte-Funktion sein sollte?
Jede Hilfe/Klarheit über die Situation wäre willkommen.
Hier ist mein Code Implementierung
für den VorschlagIn der C++ Code
// Modified C++ code
// Arrays are reference types in .NET framework so I don't need to pass a pointer.
public static byte HexToByte(byte[] buffer)
{
return HexToNibble((byte)((buffer[0] * 0x10) + HexToNibble(buffer[1])));
}
private static byte HexToNibble(byte HexChar)
{
if ((HexChar >= 48) && (HexChar <= 57))
return (byte)(HexChar - 48);
if ((HexChar >= 65) && (HexChar <= 70))
return (byte)(HexChar - 55);
if ((HexChar >= 97) && (HexChar <= 102))
return (byte)(HexChar - 87);
return 0;
}
checksum = 0;
for (int j = 0; j < count; j++)
checksum += utils.HexToByte(buffer[2 + i * 2]); // can't pass this argument ??? WHY CAN I DO THIS IN C++??
Der HexToByte Parameter nur ein Byte-Array in C# sein sollte. –
Ja, aber wie übermittele ich dann einen bestimmten Index innerhalb dieses Bytearrays, wie es im obigen C++ - Code geschieht? Außerdem ist die HexToByte eine generische Funktion, die an vielen Stellen verwendet wird. –
Sie sollten die dezimalen ASCII-Nummern durch ihre wörtlichen Zeichen ersetzen, z. B. "A" anstelle von 65. –