Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.84/19: Рейтинг темы: голосов - 19, средняя оценка - 4.84
2 / 2 / 1
Регистрация: 10.03.2013
Сообщений: 100

как сохранить в массиве байт разнотипную информацию, а потом извлечь ее

10.03.2013, 22:42. Показов 4038. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть массив байт
byte[] mass;

есть переменные

int a=10;
char b = 'w';
string c="строка";

как перевести эти значения в байты и сохранить в массив mass и, потом, извлечь их обратно?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.03.2013, 22:42
Ответы с готовыми решениями:

Как сохранить содержимое xml файла (без парсинга) в MySql и как потом xml от туда извлечь
делаю так: $xml_string=file_get_contents($uploadfile); //путь к файлу xlm ...

Отредактировать разнотипную информацию в многостраничном документе MS Word
Дано: Большой документ MS Word страниц, скажем 60. Требуется: Изменить некоторую информацию в этом документе: значения графиков,...

Сохранить информацию с ListView, потом загрузить обратно
Здравствуйте! Помогите пожалуйста, я перечитал кучу колов, но ничего нормально и конкурентного так и не нашел! =( Как сохранить все...

13
774 / 554 / 80
Регистрация: 03.07.2011
Сообщений: 1,020
10.03.2013, 22:55
Задача поставлена некорректно и скорее всего порождена отсутствием базовых знаний .Так что ответ никак !
0
Темная сторона .Net
 Аватар для Noob.net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
10.03.2013, 22:55
Андрей69, с unsafe знаком? код будет сложный)
0
2 / 2 / 1
Регистрация: 10.03.2013
Сообщений: 100
10.03.2013, 23:18  [ТС]
Цитата Сообщение от Vitall Посмотреть сообщение
Задача поставлена некорректно и скорее всего порождена отсутствием базовых знаний .Так что ответ никак !
Как записать в файл информацию разных типов - я знаю
C#
1
2
3
4
5
6
7
8
9
10
11
12
 using (FileStream fs = new FileStream(path, FileMode.Open))
 {    
                        BinaryWriter file = new BinaryWriter(fs);
           
                        int a=10;
                        char b = 'w';
                        string c="строка";
 
                            file.Write(a);
                            file.Write(b);
                            file.Write(c);                    
}
Вопрос в том, как не делать три раза Write? Как записать все разом?
Думал загнать все в массив байт и считывать в массив обратно.
Зная, в какой очередности идут переменные, разложить затем массив на составляющие.
0
774 / 554 / 80
Регистрация: 03.07.2011
Сообщений: 1,020
10.03.2013, 23:57
Цитата Сообщение от Андрей69 Посмотреть сообщение
Вопрос в том, как не делать три раза Write? Как записать все разом?
Не думаю что это стоит того что бы собирать все один массив

Цитата Сообщение от Андрей69 Посмотреть сообщение
Зная, в какой очередности идут переменные, разложить затем массив на составляющие.
Здесь можно так
C#
1
2
3
4
5
6
7
8
  using (FileStream fs = new FileStream("tt.txt", FileMode.Open))
        {
            BinaryReader sw = new BinaryReader(fs);
            Console.WriteLine("{0}  {1}  {2}",
            sw.ReadInt32(),
            sw.ReadChar(),
            sw.ReadString());
        }
Добавлено через 5 минут
Цитата Сообщение от Андрей69 Посмотреть сообщение
Вопрос в том, как не делать три раза Write? Как записать все разом?
Я набросал вот такой способ ,но это
не смотреть)
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 int a = 8998;
        char c = 'w';
        string str = "string77777";
 
        byte[] mass = new byte[sizeof(Int32) + sizeof(Char) + sizeof(Char) * str.Length];
 
        mass = BitConverter.GetBytes(a).
        Concat(BitConverter.GetBytes(c)).
        Concat(Encoding.Default.GetBytes(str)).ToArray();
 
 
        byte[] INT = new byte[sizeof(Int32)];
        byte[] CHAR = new byte[sizeof(Char)];
 
        Array.Copy(mass, INT, sizeof(Int32));
        Array.Copy(mass, sizeof(Int32), CHAR, 0, sizeof(Char));
 
        a = BitConverter.ToInt32(INT, 0);
        c = BitConverter.ToChar(CHAR, 0);
        str = Encoding.Default.GetString(mass, 6, mass.Length - 6);
 
 
        Console.WriteLine("{0}  {1}  {2}", a, c, str);
1
Темная сторона .Net
 Аватар для Noob.net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
11.03.2013, 00:01
Андрей69, Используем то же что и дал Vitall.
Используй Stream || MemoryStream для группировки байтов которые получишь.
C#
1
2
3
 
byte[] bArray = BitConverter.GetBytes(CHAR || BYTE || DOUBLE);// сам выбирай тип,кроме строки,обжектов и т.д.
            Encoding.GetBytes(yourString);
Еще могу дать ансейф. Добрый дяденька тут когда-то угостил)
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
        public static T ByteToStruct<T>(byte[] data) where T:struct
        {
            int size = data.Length;//длина массива
            IntPtr ptr = Marshal.AllocHGlobal(size);//виделаем память и создаем указатель на нее
            Marshal.Copy(data, 0, ptr, size);//копируем байты в указатель
            T ret = (T)Marshal.PtrToStructure(ptr, typeof(T));//передаем неупр память в управляемую структуру
            Marshal.FreeHGlobal(ptr);//освобождаем память
            return ret;//возвращаем обьект 
        }
        public static byte[] StructToByte<T>(T struc) where T : struct
        {
            int size = Marshal.SizeOf(struc);//размер структуры
            IntPtr ptPoint = Marshal.AllocHGlobal(size);//указатель на память размером с структуру
            Marshal.StructureToPtr(struc, ptPoint, true);//в неупр память из управл
            byte[] buff = new byte[size];//создаем массив байтов для хранение сериализ структуры
            Marshal.Copy(ptPoint, buff, 0, size);//копируем из указателя в массив байтов
            Marshal.FreeHGlobal(ptPoint);//освобождаем память
            return buff;//возвращаем массив байтов
        }
1
2 / 2 / 1
Регистрация: 10.03.2013
Сообщений: 100
11.03.2013, 00:19  [ТС]
Noob.net,
Спасибо!
Пока ждал, вот что получилось
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 int a = 10;
 char b = 'w';
 string c = "строка"; 
 
         
      byte[] bytes1 = BitConverter.GetBytes(a);
      byte[] bytes2 = BitConverter.GetBytes(b);
      byte[] bytes3 = Encoding.Default.GetBytes(c);
 
 
      byte[] mass = new byte[bytes1.Length+bytes2.Length+bytes3.Length];
 
 
            // запись в массив mass
             Array.Copy(bytes1, 0, mass, 0, bytes1.Length);
             Array.Copy(bytes2, 0, mass, bytes1.Length, bytes2.Length);
             Array.Copy(bytes3, 0, mass, bytes1.Length + bytes2.Length, bytes3.Length);
 
             //считать из массива mass
             a = BitConverter.ToInt32(mass, 0);
             b = BitConverter.ToChar(mass, 4);
             c = Encoding.Default.GetString(mass, 6, mass.Length - 6);
Цитата Сообщение от Noob.net Посмотреть сообщение
Еще могу дать ансейф. Добрый дяденька тут когда-то угостил)
Думаю, пригодится.
1
Темная сторона .Net
 Аватар для Noob.net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
11.03.2013, 00:22
Андрей69,
А почему сразу не взять Stream или MemoryStream?
0
2 / 2 / 1
Регистрация: 10.03.2013
Сообщений: 100
11.03.2013, 00:32  [ТС]
Цитата Сообщение от Noob.net Посмотреть сообщение
А почему сразу не взять Stream или MemoryStream?
Так я сразу спросил. Как сделать?
Я написал как мог.

Как можно сделать лучше? Если не затруднит - с примером

Добавлено через 2 минуты
Хотя, я хотел этот массив и передавать в Strim для записи в файл.

Может чего не догоняю?

Добавлено через 5 минут
Цитата Сообщение от Vitall Посмотреть сообщение
Я набросал вот такой способ ,но это
не смотреть)
Сделали с вами похоже
Но, почему не смотреть? Что не так. Мне и нужно узнать, как правильно
0
Темная сторона .Net
 Аватар для Noob.net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
11.03.2013, 00:41
Андрей69, то же самое
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
            int a = 10;
            char b = 'w';
            string c = "строка";
            
            byte[] bytes1 = BitConverter.GetBytes(a);
            byte[] bytes2 = BitConverter.GetBytes(b);
            byte[] bytes3 = Encoding.Default.GetBytes(c);
 
            Stream ms = new MemoryStream();
            ms.Write(bytes1, 0, bytes1.Length);
            ms.Write(bytes2, 0, bytes2.Length);
            ms.Write(bytes3, 0, bytes3.Length);
 
            ms.Seek(0, System.IO.SeekOrigin.Begin);//go to begin
 
            byte[] bytes4 = new byte[4];//тут будет bytes1
            ms.Read(bytes4, 0, 4);
Для каких целей вам это нужно?
Если вы храните что-то в массиве-листе - самый простой способ пихать это все в байты поочередно или сериализация или сразу писать.
2
2 / 2 / 1
Регистрация: 10.03.2013
Сообщений: 100
11.03.2013, 00:52  [ТС]
Цитата Сообщение от Noob.net Посмотреть сообщение
Для каких целей вам это нужно?
На форму будет выводиться различная информация в различные контролы + управляющая информация.

Инфа будет храниться в файле блоками. Я хочу доставать необходимый блок в нужный момент и раскидывать
по форме.
0
Темная сторона .Net
 Аватар для Noob.net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
11.03.2013, 00:55
Андрей69, Всегда себя пиарю - оно)
1
2 / 2 / 1
Регистрация: 10.03.2013
Сообщений: 100
11.03.2013, 01:01  [ТС]
Цитата Сообщение от Noob.net Посмотреть сообщение
Андрей69, Всегда себя пиарю - оно)
Чую, близкая тема
Завтра буду вникать. Спасибо
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
11.03.2013, 01:46
Цитата Сообщение от Noob.net Посмотреть сообщение
Если вы храните что-то в массиве-листе - самый простой способ пихать это все в байты поочередно или сериализация или сразу писать.
Соглашусь насчет сериализации - очень удобная штука. И для примера:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
class Program
    {
        static void Main(string[] args)
        {
            string path = @"F:\temp\tmp\data_file";
            using (Stream stream = new FileStream(path, FileMode.Create))
            {
                BinaryFormatter bf = new BinaryFormatter();
                bf.Serialize(stream, new MyClass(1, 'a', "line"));
            }
 
            MyClass myClass;
            using (Stream stream = new FileStream(path, FileMode.Open))
            {
                BinaryFormatter bf = new BinaryFormatter();
                myClass = bf.Deserialize(stream) as MyClass;
            }
            Console.WriteLine(myClass.IntValue);
            Console.WriteLine(myClass.CharValue);
            Console.WriteLine(myClass.StringValue);
            Console.ReadKey();
        }
 
        
    }
    
    [Serializable]
    public class MyClass
    {
        public MyClass(int intValue, char charValue, string stringValue)
        {
            this.IntValue = intValue;
            this.CharValue = charValue;
            this.StringValue = stringValue;
        }
 
        public int IntValue { get; set; }
        public char CharValue { get; set; }
        public string StringValue { get; set; }
    }
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.03.2013, 01:46
Помогаю со студенческими работами здесь

Сохранить информацию из ListView, и по возможности потом загрузить обратно
Сразу прошу меня простить,ибо я дикий нуб в этом деле,и вопросов будет очень много,и хотелось бы видеть более подробные ответы,я пытался...

как сделать, чтобы при нажатии на кнопку появлялась таблица, заданная мною, чтобы в полях таблицы можно было ввести информацию а потом сохранить ее
Здравствуйте! Подскажите, вот у меня есть веб-страница и код в ней. Если открыть в браузере, то сам будет кнопка, при помощи которой,...

Как написать на masm под х86 функцию поиска кол-ва вхождений последовательности байт в большом массиве байт?
Привет! В общем читаю я файл (большой) и хочу найти кол-во вхождений в этот файл некоторой последовательности байт, допустим &quot;AC DF...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru