-4
私は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++のコードです。あたかもバッファ配列の特定のインデックスへのポインタを渡しているように見えますが、まだ配列のように使用しますか?
これをC#コードに変換すると、HexToByte関数のパラメータはどのようになるはずですか?
状況に関する助言/明確さは認められます。ここで
は、引数が内spefic要素を指すポインタであるC++コードでの提案
してくれてありがとう@tinstaafl
// 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++??
です。 –
はい、しかし、上記のC++コードで行われているように、バイト配列内の特定のインデックスをどのように渡すのですか?また、HexToByteの場合は、多くの場所で使用される汎用関数です。 –
小文字のASCIIコードは、65の代わりに '' A ''のような文字定数で置き換える必要があります。 –