2013-09-18 2 views
1

Я конвертирую два свойства string TokenValue и TokenType, который является enum TokenType : byte Я могу преобразовать в массив байтов, используя метод ниже, и разделив два свойства на%.Преобразование части байта [] в Enum

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

Почему вы смешиваете '' Encoding.ASCII' и Encoding.UTF8', как это? Это не имеет никакого смысла. – svick

ответ

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; 
} 
Смежные вопросы