2017-02-21 13 views
-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++?? 
+0

です。 –

+0

はい、しかし、上記のC++コードで行われているように、バイト配列内の特定のインデックスをどのように渡すのですか?また、HexToByteの場合は、多くの場所で使用される汎用関数です。 –

+1

小文字のASCIIコードは、65の代わりに '' A ''のような文字定数で置き換える必要があります。 –

答えて

0

(それが動作しません)私のコードの実装です(すなわち、いくつかの開始アドレス)。関数 'HexToByte'では、同じポインタを使用して、指している要素と次の要素を取得します。ここで

はHexToByteパラメータはちょうどC#でバイト配列でなければなりませんC#実装

 public static byte HexToByte(byte[] buffer, int index) 
     { 
      return HexToNibble((byte)((buffer[index] * 0x10) + HexToNibble(buffer[index + 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; 
     } 

// calculate the checksum 
checksum = 0; 
for (int j = 0; j < count; j++) 
    checksum += utils.HexToByte(buffer, buffer[2 + i * 2]); 
関連する問題