如何将多字符串转换为C#字符串集合?

k..*_*..m 5 c# string winapi

多字符串(双空格终止的空字符串字符串)在Windows API中很常见.将从API返回的多字符串转换为C#字符串集合的好方法是什么,反之亦然?

我对正确处理字符编码特别感兴趣(稍后是Windows XP).

以下方法似乎可以创建多字符串,但我没有解码多字符串的示例.

static string StringArrayToMultiString(
    ICollection<string> stringArray
    )
{
    StringBuilder multiString = new StringBuilder();


    if (stringArray != null)
    {
        foreach (string s in stringArray)
        {
            multiString.Append(s);
            multiString.Append('\0');
        }
    }

    return multiString.ToString();
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ell 8

这可能是天真的,但如何:

static string[] MultiStringToArray(string multiString)
{
    return multiString.TrimEnd('\0').Split('\0');
}
Run Code Online (Sandbox Code Playgroud)

另外 - 你不是错过了决赛\0(你说的是双空终止)StringArrayToMultiString吗?如果数组是一个params string[]数组,可能更容易调用- 类似于:

    static string StringArrayToMultiString(params string[] values)
{
    if (values == null) throw new ArgumentNullException("values");
    StringBuilder multiString = new StringBuilder();

    foreach (string s in values)
    {
        multiString.Append(s);
        multiString.Append('\0');
    }
    return multiString.ToString();
}
Run Code Online (Sandbox Code Playgroud)

[关于最终\ 0的澄清后编辑]

  • 使用`multiString.Split('\ 0',StringSplitOptions.RemoveEmptyEntries)`可以省略TrimEnd,因为空字符串不能存储在双空终止列表中. (2认同)