string tmp = "ala ma kota";
unsafe
{
fixed (byte* data = &tmp.ToCharArray()[0])
{
some_function(data);
}
}
但我没有编码就无法直接转换。我尝试使用Encode类但没有任何效果。我知道,some_function需要用char指针调用。它指向byte的数组。
答案 0 :(得分:5)
您不需要自己明确地执行此操作。
相反,使用P / Invoke声明C方法以接受string
类型的参数。
然后添加到P / Invoke声明:
[DllImport("YourDllName.dll", CharSet=CharSet.Ansi)]
然后,编组器会将字符串转换为ANSI。
请注意,我假设该字符串被传递给被调用函数,因此该参数不是用于从被调用函数返回新字符串的指针。
实际上,默认值为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);
}
}