1

我正在转换两个属性string TokenValue,我可以使用以下方法将其转换为字节数组,并用 % 分隔这两个属性TokenTypeenum 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 致谢。

4

1 回答 1

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;
}
于 2013-09-18T21:06:21.423 回答