gpt4 book ai didi

c# - 将 C++ 指针数学转换为 C#

转载 作者:搜寻专家 更新时间:2023-10-31 00:33:42 30 4
gpt4 key购买 nike

我目前正在从事一个需要将一些 C++ 代码转换为 C# 环境的项目。在大多数情况下,它实际上非常简单,但我目前正在转换一些较低级别的内存操作函数,并且在如何继续方面遇到了一些不确定性。

在 C++ 代码中,我有很多这样的实例(显然非常简单):

void SomeFunc(unsigned char* myMemoryBlock)
{
AnotherFunc(myMemoryBlock);

AnotherFunc(myMemoryBlock + memoryOffset);
}

void AnotherFunc(unsigned char* data)
{
// Also simplified - basically, modifying the
// byte pointed to by data and then increasing to the next item.
*data = 2;
data++;

*data = 5;
data++;

// And so on...
}

我认为在 C# 中,我基本上必须将“unsigned char*”视为字节数组 (byte[])。但是要执行与指针算法类似的操作,是否本质上只是增加一个“currentIndex”值来访问字节数组?对于像 AnotherFunc 这样的东西,我想这意味着我还需要传入一个起始索引,如果起始索引不是 0 的话?

只是想确认这是在 C# 中应该如何完成的,或者是否有更好的方法来进行这种转换。另外,我不能在我当前的环境中使用“不安全”关键字,所以实际上使用指针是不可能的!

最佳答案

这两个函数将 myMemoryBlock 视为一个数组。您可以将单个 myMemoryBlock 参数替换为一对 myArraymyOffset,如下所示:

void SomeFunc(char[] myArray)
{
AnotherFunc(myArray, 0);

AnotherFunc(myArray, memoryOffset);
}

void AnotherFunc(char[] data, int offset)
{
// Also simplified - basically, modifying the
// byte pointed to by data and then increasing to the next item.
data[offset++] = 2;
data[offset++] = 5;
// And so on...
}

注意:C++ 类型 unsigned char 通常用作“未类型化内存块”(相对于“表示字符数据的内存块”)的替代”)。如果您的情况属于这种情况,即指针指向的内存不一定是字符,则 byte 数组将是更合适的选择。

关于c# - 将 C++ 指针数学转换为 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28098955/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com