我正在处理 C# 代码中的 char* (在不安全的部分)。有什么方法可以从 C# 调用 strlen 函数。必须编写自定义 strlen 函数来搜索空终止符,这违反了所有常识。没有办法从 C# 或我可以访问的类似方法调用 strlen 吗?
在大图中,我试图将 char* 转换为字符串对象,但字符是 ANSCII 格式,所以我将使用 .NET Encoding.Convert 命名空间来转换它。但在我这样做之前我需要知道字符串的长度。
我正在处理 C# 代码中的 char* (在不安全的部分)。有什么方法可以从 C# 调用 strlen 函数。必须编写自定义 strlen 函数来搜索空终止符,这违反了所有常识。没有办法从 C# 或我可以访问的类似方法调用 strlen 吗?
在大图中,我试图将 char* 转换为字符串对象,但字符是 ANSCII 格式,所以我将使用 .NET Encoding.Convert 命名空间来转换它。但在我这样做之前我需要知道字符串的长度。
Marshal.PtrToStringAnsi()
完全满足您的需要:
分配一个托管字符串,并将存储在非托管内存中的字符串中的所有字符复制到其中,直到第一个空字符为止。
顺便说一句,该方法调用lstrlenA
了指针,它实际上只是一个 import from kernel32.dll
。换句话说,似乎没有可用的托管“让我知道这个非托管字符串的长度”方法。