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

时间:2013-06-08 10:09:49

标签: c#

我还没有找到解决方案,而且我很头疼... D:

现在假设我有一个字符串:

string n = "74657374";

我想将其转换为字节数组。

byte[] { 0x74, 0x65, 0x73, 0x74 }; //how I want it like

最好的方法是什么?

3 个答案:

答案 0 :(得分:1)

试试这个:

public static byte[] GetNumbers(string data)
{
    if (data == null) throw new ArgumentNullException();
    if (data.Length % 2 != 0
           || !data.All(char.IsDigit)) throw new ArgumentException();
    List<byte> temp = new List<byte>(data.Length / 2);
    for (int i = 0; i < data.Length; i += 2)
    {
        temp.Add(byte.Parse(string.Concat(data[i], data[i + 1]),
            NumberStyles.HexNumber));
    }
    return temp.ToArray();
}

而且,如果字符串可能没有正确格式化,请使用它(除了TryX格式外,它只是一样的东西):

public static bool TryGetNumbers(string data, out byte[] output)
{
    if (data == null || data.Length % 2 != 0 || !data.All(char.IsDigit))
    {
        output = null;
        return false;
    }
    List<byte> temp = new List<byte>(data.Length / 2);
    for (int i = 0; i < data.Length; i += 2)
    {
        temp.Add(byte.Parse(string.Concat(data[i], data[i + 1]),
            NumberStyles.HexNumber));
    }
    output = temp.ToArray();
    return false;
}

答案 1 :(得分:0)

如果您定义了一个扩展方法,将您的序列拆分为给定大小的子序列,例如Handcraftsman's InSetsOf,那么您可以将其作为一个单行使用:

string n = "74657374";
byte[] b = n.InSetsOf(2)
            .Select(x => (byte)((x[0] - '0') * 16 + x[1] - '0'))
            .ToArray();

此代码假定字符串的长度是偶数。

答案 2 :(得分:0)

以下是另一种方法,将char[]用作IEnumerable<char>

    static byte[] ToArrayOfByteValues(this string str)
    {
        var charArray = str.ToArray();
        var byteArray = new byte[charArray.Length / 2];

        for (int i = 0; i < byteArray.Length; i++)
        {
            var q = new StringBuilder().Append(charArray.Skip(i * 2).Take(2).ToArray<char>()).ToString();
            byteArray[i] = Byte.Parse(q, System.Globalization.NumberStyles.HexNumber);
        }

        return byteArray;
    }
相关问题