• Как объединить и разъединить byte[]?

    Neuroware
    @Neuroware
    Программист в свободное от работы время
    Согласен с Александр Зайцев, однозначно сериализация. ниже пример, честно с.изженный отсюда
    using System;
    using System.Runtime.Serialization.Formatters.Binary;
    using System.IO; 
     
    namespace Serialization
    {
        [Serializable]
        class MSG
        {
            public int type;
            public string message;
            
            public MSG(int i, string s)
            {
                type = i;
                message = s;
            }
        }
        
        class Program
        {
            public static byte[] Serialization (MSG obj)
            {
                BinaryFormatter formatter = new BinaryFormatter();          
                MemoryStream stream = new MemoryStream();           
                formatter.Serialize(stream, obj);           
                byte[] msg = stream.ToArray();
                return msg;
            }
            
            public static MSG DeSerialization (byte[] serializedAsBytes)
            {
                MemoryStream stream = new MemoryStream();           
                BinaryFormatter formatter = new BinaryFormatter();          
                stream.Write(serializedAsBytes, 0, serializedAsBytes.Length);           
                stream.Seek(0, SeekOrigin.Begin);           
                return (MSG)formatter.Deserialize(stream); 
            }
            
            public static void Main(string[] args)
            {
                MSG msg = new MSG(1,"Я не сериализован");
                byte[] buf = new byte[1024];
                
                buf = Serialization(msg);
                
                Console.WriteLine("До сериализации  " + buf);
                
                MSG msg1 = new MSG(2,"Текст");
                msg1 = DeSerialization (buf);
                Console.WriteLine("После сериализации  " + msg1.message);
                
                Console.Write("Press any key to continue . . . ");
                Console.ReadKey(true);
            }
        }
    }
    Ответ написан
    2 комментария
  • Как объединить и разъединить byte[]?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    Строки можно писать нуль-терминированные. Сначала
    System.Text.Encoding.Unicode.GetBytes(str + "\0");
    после Array.CopyTo, а обратное преобразование -
    do {/*сейчас текст*/} while (str[i] != 0);
    /*теперь остальное*/

    Не забываем про кодировку. А чтобы было красиво, стоит послушаться Александр Зайцев и реализовать ISerializable.
    Ответ написан
    2 комментария
  • Как объединить и разъединить byte[]?

    Я бы сделал это при помощи сериализации (класс BinaryFormatter).

    Создаём класс, который содержит картинку и текст, пихаем туда твою картинку и текст, сериализуем всё это при помощи BinaryFormatter.Serialize( ) в MemoryStream, получаем из него массив байт.

    При получении массива байт, создаём MemoryStream из массива, десериализуем из него при помощи BinaryFormatter.Deserialize( ) - получаем класс с нашей картинкой и текстом
    Ответ написан
    Комментировать