来自C#中字符串的char *指针

时间:2009-11-01 20:49:30

标签: c# pointers char

是否可以在C#中为char*变量获取string

我需要将路径字符串转换为char*以使用一些本机win32函数...

6 个答案:

答案 0 :(得分:42)

嗯,你当然可以这样做:

string str = "my string";

unsafe 
{
    fixed (char* p = str)
    {               
        // do some work
    }
}

其中有一个运算符(char *)绑定到字符串对象。 但是,输出格式可能与底层C或其他格式不兼容......但这是解析字符串的一个很好的解决方案。 希望对阅读这篇文章的人有所帮助。

答案 1 :(得分:12)

您可以将StringBuilder作为char*传递。

查看http://pinvoke.net以查看该功能的签名是否已经存在。

答案 2 :(得分:4)

这取决于你想做什么。当你通过PInvoke调用Win32函数时,你应该能够只传递String变量;框架为你整理了一切。如果您需要更复杂的内容,请查看Marshal.StringToHGlobalAnsi以及Marshal类的其他方法。

答案 3 :(得分:4)

要合并已经给出的2个水壶,它取决于参数所需的方向。

如果函数只需要输入字符串,即const char *,则可以使用类型System.String(或普通string)的参数。

如果函数填充字符串,即char * buffer, int bufferSize,则可以传递System.Text.StringBuilder

在这两种情况下,(自动)Marshaling都会为您进行必要的转换。

答案 4 :(得分:4)

下面的代码不需要不安全的上下文(是的,它显示了string的{​​{1}}方法实现的内部螺栓和位表明它与Java中的一个有区别,因为在C#哈希码的值没有被缓存,通常它表明C#字符串最终不会像你可能已经被教过一样,不能处理Fon Neiman):

GetHashCode

答案 5 :(得分:0)

您可以使用Encoding.ASCII.GetBytes从字符串中获取byte []数组。 这可能使用C#中的fixed语句转换为char *。 (这会占用分配的内存,不允许gc移动它 - 然后你可以指向它)。

所以,只有当你设法将byte *转换为char *时,我的答案才是肯定的。 (在C / C ++中,这不是问题,但我对C#不太确定)

PS>如果我找到关于此文章的书签,我会稍后发布一些代码。我知道我在某个地方......