C#将包含c样式字符串的byte []转换为字符串 - NOT Encoding.GetString(byte [])

Mar*_*oon 5 c# string

愚蠢的我试图将从外部源接收的字节数组转换为字符串.(是的,我确实知道Encoding.GetString(byte[]).

到目前为止我所拥有的:

void myfunc()
{
    byte[] rawData = new byte[ 128 ];

    for( int i = 0; i < rawData.Length; ++i )
    {
        rawData[ i ] = 0;
    }

    rawData[ 0 ] = (byte)'H';
    rawData[ 1 ] = (byte)'e';
    rawData[ 2 ] = (byte)'l';
    rawData[ 3 ] = (byte)'l';
    rawData[ 4 ] = (byte)'o';


    string asString = Encoding.UTF8.GetString( rawData, 0, rawData.Length );

    string asRealString = Encoding.UTF8.GetString( rawData );
}
Run Code Online (Sandbox Code Playgroud)

两个字符串都包含Hello部分,但之后也包含很多\ 0,这不是我所期望的.调试器的输出:asRealString =

"Hello\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
Run Code Online (Sandbox Code Playgroud)

有什么方法可以让我像"Hello"这样的字符串吗?

我做了goolge,但我得到的只是Encoding.GetString(byte[])......

编辑:字节数组的创建者超出了我的范围!我确实把它作为更大的C-Style结构的一部分.并且没有字符串的前导长度.此外,我希望有一个ome内置的方式来tdo它,我没有必要找到第一个\ o和tehn转换知道长度....

编辑 这是我最后使用的:

private static string convertCString( byte[] buffer, int maxLength, Encoding targetEncoding )
{
    int length = 0;
    int realMax = buffer.Length < maxLength ? buffer.Length : maxLength;

    for( 
         ; 0 != buffer[length] && length < realMax
         ; ++length )
    {}

    return targetEncoding.GetString( buffer, 0, length );
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ell 13

找到第一个0:

    int len = Array.IndexOf(rawData, (byte)0); // maybe some bounds check too
    string asString = Encoding.UTF8.GetString(rawData, 0, len);
Run Code Online (Sandbox Code Playgroud)