我正在转换两个属性string TokenValue
和TokenType
,即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
提前谢谢。
答案 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;
}