gpt4 book ai didi

c# - 将 C 中的指针转换为 C#

转载 作者:太空狗 更新时间:2023-10-29 16:06:39 27 4
gpt4 key购买 nike

我需要将一些使用指针的 C 语言转换为 C#。

重要的是,我得到了一个未格式化数据的缓冲区,需要处理它就好像它被格式化了一样。它通常从文件中读取,但也可能不是它可能来自运行不同硬件的嵌入式 C 应用程序。

在这个例子中,我需要把它当作一个 long 数组。

我 C 我只是简单地创建一个指向 long 的指针,然后转换缓冲区的地址。

但在 C# 中,我不允许获取托管对象的地址它不会让我将 byte[] 转换为 long[]

那么我如何在 C# 中正确地做到这一点

void TestFunction(void)
{
char buffer[256];
PrintBufferAsLongPointer(buffer);
PrintBufferAsLongArray(buffer);
}

void PrintBufferAsLongPointer(char *buffer)
{
long *ptr = (long*)buffer;
for(int count = 0; count < 64; count++)
{
printf(" %X", *ptr++);
}
}

void PrintBufferAsLongArray(char *buffer)
{
for(int index = 0; index < 64; index++)
{
printf(" %X", buffer[index]);
}
}

最佳答案

如果您小心的话,您仍然可以在 C# 中使用指针(并在项目选项中启用“不安全代码”):

private static unsafe void PrintBufferAsLongArray(byte[] buffer)
{
fixed (byte* pBuffer = buffer)
{
long* longData = (long*)pBuffer;
for (int index = 0; index < 64; index++)
Console.WriteLine(" {0:X}", longData[index]);
}
}

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

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