如何快速将字符串数组转换为字节数组?
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[]
缓冲区。
这仅适用于固定宽度的编码,Unicode
或 ASCII
。目前尚不清楚您想要哪种编码。出现该错误的原因是字符不适合 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>
重载
我需要将字符串数组转换为字节数组。我知道这个问题已经发布并回答了很多次,但出于某种原因,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[]
缓冲区。
这仅适用于固定宽度的编码,Unicode
或 ASCII
。目前尚不清楚您想要哪种编码。出现该错误的原因是字符不适合 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>
重载