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

问题描述 投票:-1回答:1

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

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

对右侧表达的评价是我正在努力的领域。

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

当我尝试将它用作索引时,索引计算的结果(0x309)超出了固定数组大小的范围(256x UInt32值),所以每当我觉得我接近这个时,我就会得到一个c#中的边界异常....这在c ++中似乎不是问题?

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

提前致谢

c# c++
1个回答
1
投票

您需要显示C#以及实际值是什么。 tbl_id & 0x3FF == 0x309肯定是可能的,因为0x309中的所有位也都在0x3FF中。

  • 如果你正在使用& 0x3FF,那么我希望ValueTable0x3FF + 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];)
© www.soinside.com 2019 - 2024. All rights reserved.