将byte []的一部分转换为Enum

时间:2013-09-18 20:39:39

标签: c# .net

我正在转换两个属性string TokenValueTokenType,即enum TokenType : byte我可以使用以下方法转换为字节数组,并将这两个属性与%分开。

public byte[] ToByteArray()
{
    List<Byte> bytes = new List<byte>();
    bytes.AddRange(Encoding.ASCII.GetBytes(TokenValue));
    bytes.AddRange(Encoding.ASCII.GetBytes("%"));
    bytes.Add((byte)this.TokenType);
    return bytes.ToArray();
}

我的问题是尝试使用以下方式转换回来:

    public void FromByteArray(byte[] value)
    {
        Regex reg = new Regex("%");
        string str = Encoding.UTF8.GetString(value);
        string[] fields = reg.Split(str);
        if (fields.Count() > 1)
        {
        TokenValue = fields[0];
        TokenType = (TokenType)Encoding.ASCII.GetBytes(fields[1]); //Something along these lines to convert back to the TokenType
        }
        else if (fields.Count() == 1)
        {
        TokenValue = fields[0];
        }
}

不确定如何将字节转换回enum TokenType 提前谢谢。

1 个答案:

答案 0 :(得分:2)

ToByteArray()中,您将所有内容转换为字节,然后连接字节值。因此,在FromByteArray()中,您需要在之前拆分字节数组,然后将其解码为字符串等:

public void FromByteArray(byte[] value)
{
    var delimiter = (byte)'%';

    var stringBytes = value.TakeWhile(b => b != delimiter).ToArray();

    var enumByte = 0;
    if (stringBytes.Length < value.Length)
    {
        enumByte = value.Last();
    }

    TokenValue = Encoding.ASCII.GetString(stringBytes);
    TokenType = (TokenType)enumByte;
}