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

时间:2013-08-19 11:59:05

标签: 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);
    }
}

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

2 个答案:

答案 0 :(得分:5)

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

相反,使用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*(或者您刚刚使用的任何内容)。

答案 1 :(得分:3)

您应该使用System.Text命名空间:

string tmp = "ala ma kota";
unsafe
{
    fixed (byte* data = &System.Text.Encoding.ASCII.GetBytes(tmp)[0])
    {
        some_function(data);
    }
}