如何快速将字符串数组转换为字节数组?

How to fast convert a string array to a byte array?

我需要将字符串数组转换为字节数组。我知道这个问题已经发布并回答了很多次,但出于某种原因,none 的解决方案对我有用。

这是最常见的解决方案:

public static byte[] StringArrayToByteArray(string[] someStringArray)
{
    return someStringArray.Select(s => Convert.ToByte(s, 16)).ToArray();
}

但是,当我 运行 这样做时,我得到以下错误:FormatException: Could not find any parsable digits.FormatException: Additional unparsable characters are at the end of the string.

我需要为我的数据保存字母和分隔符 (/)。这是我的代码:

        string[] stringArray = new string[map.Size.x * map.Size.y];
        int counter = 0;
        for (int y = (int) map.Rect.y; y < map.Rect.yMax; y++)
        {
            for (int x = (int) map.Rect.x; x < map.Rect.xMax; x++)
            {
                stringArray[counter] = map[x,y].Name;
                stringArray[counter] += "/";
                counter++;
            }
        }

然后我需要将这个字符串[]转换成字节数组。

您可以将这些字符串合并为一个字符串,return 其 byte[]。即:

public static byte[] StringArrayToByteArray(string[] someStringArray)
{
    return string.Join("",someStringArray).Select(x => (byte)x).ToArray();
}

执行此操作的最快方法(性能方面)是使用 Encoding.GetBytes 的重载之一,它允许提供 byte[] 缓冲区。

这仅适用于固定宽度的编码,UnicodeASCII。目前尚不清楚您想要哪种编码。出现该错误的原因是字符不适合 byte,所以我选择了 Unicode

public static byte[] StringArrayToByteArray(string[] someStringArray)
{
    var buffer = new byte[someStringArray.Sum(s => s.Length) * 2];   // remove * 2 for ASCII
    var position = 0;
    foreach (var s in someStringArray)
        position += Encoding.Unicode.GetBytes(s, o, s.Length, buffer, position);

    return buffer;
}

您还可以在较新版本的 .NET 中使用新的 Span<byte> 重载