中获得
char*
变量的string
我需要将路径字符串转换为使用一些本机Win32功能...
韦尔你当然可以这样做:
char*
在哪里有一个绑定到字符串对象的操作员(char*)。 但是,输出格式可能与基础C或其他格式不兼容……但是,这是解析字符串的一个很好的解决方案。 希望这对阅读这篇文章的任何人都有帮助。 您可以通过一个
string str = "my string";
unsafe
{
fixed (char* p = str)
{
// do some work
}
}
要结合已经给出的2个ANWER,这取决于您的参数所需的方向。如果功能只需要一个输入字符串,即,您可以使用类型
string
(或plainGetHashCode
)的参数。
using System;
using System.Runtime.InteropServices;
namespace Guess
{
class Program
{
static void Main(string[] args)
{
const string str = "ABC";
Console.WriteLine(str);
Console.WriteLine(str.GetHashCode());
var handle = GCHandle.Alloc(str, GCHandleType.Pinned);
try
{
Marshal.WriteInt16(handle.AddrOfPinnedObject(), 4, 'Z');
Console.WriteLine(str);
Console.WriteLine(str.GetHashCode());
}
finally
{
handle.Free();
}
}
}
}
您可以使用Encoding.ascii.getBytes从字符串中获取字节[]数组。 使用C#中的固定语句,这可能是可转换为char*的。 (这可以固定分配的内存,不允许GC移动它 - 然后您可以将指针推向它)。因此,只有当您设法将字节*转换为char*时,我的答案才是肯定的。 (在C/C ++中,这不是问题,但是我对C#不确定)
其他一些帖子指出,
Marshal
与本机格式并不兼容,并且也无法真正起作用。这对我有用:示例:
const char *
示例用零终止字符串:
(许多本机库要求)
System.String