char* C#中的字符串指针

问题描述 投票:0回答:6
可以在c#?

中获得

char*
变量的
string

我需要将路径字符串转换为使用一些本机Win32功能...

	

韦尔你当然可以这样做:
c# pointers char
6个回答
63
投票
char*

在哪里有一个绑定到字符串对象的操作员(char*)。 但是,输出格式可能与基础C或其他格式不兼容……但是,这是解析字符串的一个很好的解决方案。 希望这对阅读这篇文章的任何人都有帮助。

您可以通过一个

string str = "my string"; unsafe { fixed (char* p = str) { // do some work } }

。 请看一下

13
投票
查看该函数的签名是否还没有。

以下代码需要不安全的上下文(是的,它显示了有关实现
StringBuilder
方法的内部螺栓和碎屑表明它与java中的差异表明,因为在c#中,哈希柱的价值没有被缓存,而且通常表明C#strings最终并不像您那样不可实现,就像您可能已经不可能与Fon Neiman:fon neiman:fon neiman:fon neiman:fon neiman:

char*

取决于您想做什么。当您通过PINVOKE调用Win32功能时,您应该能够通过字符串变量;该框架为您提供了一切。如果您需要更复杂的东西,请查看

marshal.stringtohglobalansi

10
投票

要结合已经给出的2个ANWER,这取决于您的参数所需的方向。

如果功能只需要一个输入字符串,即,您可以使用类型
string
(或plain

GetHashCode
)的参数。 

5
投票
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#不确定)


4
投票

其他一些帖子指出,

Marshal

与本机格式并不兼容,并且也无法真正起作用。这对我有用:
示例:

const char *

示例用零终止字符串:
(许多本机库要求)

System.String


1
投票
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.