在C#(strlen函数?)中处理字符*

在C#(strlen函数?)中处理字符*,c#,c++,character-encoding,strlen,arrays,C#,C++,Character Encoding,Strlen,Arrays,我正在处理C代码中的字符*(在一个不安全的部分)。有没有办法从C#调用strlen函数。必须编写自定义strlen函数来搜索空终止符,这违反了所有常识。难道没有一种方法可以从C#或我可以访问的类似方法调用strlen吗 在大图中,我试图将char*转换为string对象,但是字符是ANSCII格式的,所以我将使用.NET Encoding.convert命名空间来转换它。但我需要先知道字符串的长度,然后才能这样做。完全满足您的需要: 分配托管字符串并将所有字符复制到第一个字符 从存储在非托管内存

我正在处理C代码中的字符*(在一个不安全的部分)。有没有办法从C#调用strlen函数。必须编写自定义strlen函数来搜索空终止符,这违反了所有常识。难道没有一种方法可以从C#或我可以访问的类似方法调用strlen吗

在大图中,我试图将char*转换为string对象,但是字符是ANSCII格式的,所以我将使用.NET Encoding.convert命名空间来转换它。但我需要先知道字符串的长度,然后才能这样做。

完全满足您的需要:

分配托管字符串并将所有字符复制到第一个字符 从存储在非托管内存中的字符串中输入空字符


顺便说一句,该方法在指针上调用
lstrlenA
,这实际上只是从
kernel32.dll
导入的。换句话说,似乎没有可用的托管“获取此非托管字符串的长度”方法。

@dlev我从闪烁环境获取此字符*,因此我无法控制它。我不能直接得到长度,但我可以用其他的东西来计算。我只是想,如果他们让你处理char*,一定有办法在C#中实现strlen。我知道我不是第一个想到这一点的人。
char
有两个字节宽,因此如果您的
char*
指向单字节数据,您可能根本找不到空终止符。+1很好,但数据必须有一些空终止符(它的存在不是强制性的)。需要检查OP是否可以。@Tigran OP的要求假设存在空终止字符。他大概了解坏数据导致访问冲突的风险。@Tigran我假设存在空终止符。如果情况不是这样,我会很快知道,但显然总是这样。