-4
我有一些C++代碼,我試圖將其轉換爲C#,但我不完全理解發生了什麼。將C++轉換爲C#:將指針傳遞給函數
這裏是C++代碼:
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
}
我的困惑是 'HexToByte' 函數是如何使用指針有關。它看起來好像我們正在傳遞指向緩衝區數組的特定索引的指針,但是繼續使用它,就好像它仍然是一個數組?
將此轉換爲C#代碼時我不確定HexToByte函數的參數應該是什麼?
任何幫助/清晰的情況將不勝感激。
這裏是我的代碼執行(即不工作)
// 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++??
的HexToByte參數應該只是在C#的字節數組。 –
是的,但是如何在該字節數組中傳遞特定索引,就像在上面的C++代碼中完成的一樣?此外,HexToByte如果是在很多地方使用的泛型函數。 –
您應該用它們的字符常量替換十進制ASCII數字,例如「A」而不是65. –