谷歌没有帮助我,如我想要的,所以我在这里写帖子。
我在C#和C函数(在dll中)中都有Unicode字符串,它们需要char(ANSI)*。
我尝试去做

string tmp = "ala ma kota";
unsafe
{
    fixed (byte* data = &tmp.ToCharArray()[0])
    {
        some_function(data);
    }
}


但我不能直接转换而不进行编码。我尝试使用Encode类,但没有任何效果。我知道,some_function需要使用char指针来调用。它指向字节数组的地方。

最佳答案

您不需要自己明确地执行此操作。

而是使用P / Invoke声明C方法以接受string类型的参数。

然后添加到P / Invoke声明中:

 [DllImport("YourDllName.dll", CharSet=CharSet.Ansi)]


然后,编组器将为您将字符串转换为ANSI。

请注意,我假设字符串正在传递给被调用的函数,因此该参数不是用于从被调用函数返回新字符串的指针。

有关更多详细信息,请参见此处:http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.dllimportattribute.charset.aspx

实际上,默认值为CharSet.Ansi,因此您可能只需要将参数声明为string而不是byte*(或刚才使用的任何内容)即可。

关于c# - C#将字符串Unicode转换为字节Ansi,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18313255/

10-11 22:38
查看更多