2

我正在FCL中寻找一种类似于的方法Encoding.UTF8.GetString(bytes, index, count),但它不需要count参数,而是假定给定索引处的字符串以空值结尾。

我将我当前的解决方案作为答案发布(见下文),但很想知道是否有人知道更优雅或性能更好的方法。

4

1 回答 1

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.");
    }
}

虽然这可行,但它有一个小问题:假设除了 UTF-8 编码之外的任何字符都'\0'不会包含一个0字节。虽然情况确实如此,但如果该假设被完全封装在Encoding.UTF8类中会更好。

于 2013-02-24T13:24:22.693 回答