多字符串(以空分隔字符串的双空结尾字符串)在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();
}
最佳答案
这可能很幼稚,但是:
static string[] MultiStringToArray(string multiString)
{
return multiString.TrimEnd('\0').Split('\0');
}
另外-您是否遗漏了
\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();
}
[在对final进行澄清后编辑\0]