我在FCL中寻找类似于Encoding.UTF8.GetString(bytes, index, count)
的方法,但不需要count
参数,而是假设给定索引处的字符串为空 - 终止。
我发布我当前的解决方案作为答案(见下文),但我很想知道是否有人知道更优雅或更好的方法。
答案 0 :(得分:1)
我已经写了自己的方法,因为我还没有在FCL找到一个:
using System.Text;
string GetZeroTerminatedUTF8StringAt(byte[] bytes, int index)
{
int zeroTerminatorIndex = Array.IndexOf<byte>(bytes, value: 0, startIndex: index);
if (zeroTerminatorIndex >= index)
{
return Encoding.UTF8.GetString(bytes, index, count: zeroTerminatorIndex - index);
}
else
{
throw new ArgumentOutOfRangeException("index", "No zero-terminator found.");
}
}
虽然这有效,但它有一个小问题:假设除'\0'
之外的任何字符都不会包含UTF-8编码中的0
字节。虽然事实确实如此,但如果将这个假设完全封装在Encoding.UTF8
类中,那就更好了。