将C ++转换为C#:将指针传递给函数

时间:2017-02-21 19:51:22

标签: c# c++ pointers

我有一些C ++代码,我试图转换为C#,但我不完全了解发生了什么。

这是C ++代码:

<ul class="topnav" id="myTopnav">
  <li><a class="navItem" href="FAQ-sports.html">Sports</a></li>
  <li><a href="FAQ-casino.html" class="navItem">Casino</a></li>
  <li><a href="#Slots" class="navItem">Slots</a></li>
  <li><a href="#Vegas" class="navItem">Vegas</a></li class="active">
  <li class="active"><a href="#Bingo" class="">Bingo</a></li>
  <li class="icon"><a href="javascript:void(0);" style="font-size:15px;" onclick="myFunction()">☰</a></li>
</ul><br><br>

我的困惑是关于'HexToByte'函数如何使用指针。看起来好像我们正在传递指向缓冲区数组的特定索引的指针,但是继续使用它,好像它仍然是一个数组?

将此转换为C#代码时,我不确定HexToByte函数的参数应该是什么?

对此情况的任何帮助/澄清将不胜感激。

这是我的代码实现(不起作用)

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
}

1 个答案:

答案 0 :(得分:0)

@tinstaafl感谢您的建议

在C ++代码中,参数是指向字节数组中的特定元素的指针(即一些起始地址)。在函数'HexToByte'中,它使用相同的指针来获取它指向的元素以及下一个元素。

这是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]);