C#将字符串Unicode转换为字节Ansi

Jan*_*ski 2 c c# unicode character-encoding

谷歌没有帮助我,比如我想在这里写帖子.我在C#和C函数(在dll中)有Unicode字符串,它需要char(ANSI)*.我试着去做

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

但我没有编码就无法直接转换.我尝试使用Encode类但没有任何效果.我知道,some_function需要用char指针调用.它指向字节数组的位置.

Mat*_*son 6

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

相反,使用P/Invoke声明C方法以接受类型的参数string.

然后添加到P/Invoke声明:

 [DllImport("YourDllName.dll", CharSet=CharSet.Ansi)]
Run Code Online (Sandbox Code Playgroud)

然后,编组器会将字符串转换为ANSI.

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

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

事实上,默认是CharSet.Ansi这样你可能只需要声明参数string而不是byte*(或者你现在使用的任何东西).