多字符串(双空格终止的空字符串字符串)在Windows API中很常见.将从API返回的多字符串转换为C#字符串集合的好方法是什么,反之亦然?
我对正确处理字符编码特别感兴趣(稍后是Windows XP).
以下方法似乎可以创建多字符串,但我没有解码多字符串的示例.
static string StringArrayToMultiString( ICollectionstringArray ) { StringBuilder multiString = new StringBuilder(); if (stringArray != null) { foreach (string s in stringArray) { multiString.Append(s); multiString.Append('\0'); } } return multiString.ToString(); }
Marc Gravell.. 8
这可能是天真的,但如何:
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(); }
[关于最终\ 0的澄清后编辑]
这可能是天真的,但如何:
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(); }
[关于最终\ 0的澄清后编辑]