gpt4 book ai didi

c# - byte[] 到 C# 中的 byte*

转载 作者:太空狗 更新时间:2023-10-29 21:24:29 24 4
gpt4 key购买 nike

我创建了 2 个程序 - 在 C# 和 C++ 中,都从 C dll 调用 native 方法。 C++ 工作正常,因为有相同的数据类型,C# 不工作。

并且 native 函数参数是unsigned char*。我在 C# 中尝试了 byte[],它没有用,然后我尝试了:

fixed(byte* ptr = byte_array) {
native_function(ptr, (uint)byte_array.Length);
}

它也不起作用。这样将字节数组转换为byte*是否正确?在 C# 中使用 byte 作为 C 中的 unsigned char 是否正确?

编辑:这东西返回错误的结果:

byte[] byte_array = Encoding.UTF8.GetBytes(source_string);
nativeMethod(byte_array, (uint)byte_array.Length);

这东西也返回了错误的结果:

 byte* ptr;
ptr = (byte*)Marshal.AllocHGlobal((int)byte_array.Length);
Marshal.Copy(byte_array, 0, (IntPtr)ptr, byte_array.Length);

最佳答案

unsafe class Test
{
public byte* PointerData(byte* data, int length)
{
byte[] safe = new byte[length];
for (int i = 0; i < length; i++)
safe[i] = data[i];

fixed (byte* converted = safe)
{
// This will update the safe and converted arrays.
for (int i = 0; i < length; i++)
converted[i]++;

return converted;
}
}
}

您还需要在构建属性中设置“使用不安全代码”复选框。

关于c# - byte[] 到 C# 中的 byte*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6369058/

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