const数组索引指针从C ++到C#的转换

时间:2019-04-12 12:53:27

标签: c# c++

几天来,我一直在尝试将以下c ++代码转换为c#。通过引用对数组进行索引,其中引用由计算结果确定。

pData[data_id] ^= ((const uint8_t *)ValueTable)[tbl_id & 0x3FF];

对右边表达的评估是我正在努力的领域。

当我尝试在c#中执行此操作时,我得到的结果是数组值而不是索引。

当我尝试将其用作索引时,索引计算(0x309)的结果超出了固定数组大小(256x UInt32值)的范围,因此,每当我感到接近此值时,我都会得到C#中的边界异常。...在c ++中这似乎不是问题吗?

很抱歉,如果这对大家都很明显,我对c ++和c#的经验是有限的。如果有人能指出我的方向,将不胜感激。

预先感谢

1 个答案:

答案 0 :(得分:1)

您需要显示C#及其实际值。 tbl_id & 0x3FF == 0x309当然是可能的,因为0x309中的所有位也都在0x3FF中设置了。

  • 如果您使用的是& 0x3FF,那么我希望ValueTable具有0x3FF + 1个元素(1024)。
  • 如果ValueTable实际上仅应具有256个元素并且应该环绕,那么请使用& 0xFF(请注意,如果可能未设置低位,则使用%进行包裹通常更安全,例如,假设您有100个元素)。
  • 如果ValueTable是1024字节(uint8_t),则在C#中使用byte[1024]而不是256个32位整数。
  • 如果ValueTable是256个32位整数,但是您要在此处访问一个字节,那么将其更改为byte[]是最简单的方法,否则采用整数索引(index / 4),然后从该整数中获取相关的字节(可能是i = tbl_id & 0x3FF; BitConverter.GetBytes(table[i / 4])[i % 4];)