Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/21: Рейтинг темы: голосов - 21, средняя оценка - 4.52
Темная сторона .Net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
1

C# и бинарники

21.07.2012, 13:17. Показов 3872. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Ребята есть проблема.
Как в бинарник записать несколько классов,а потом считать только один определенный(например 5).То-есть читать не последовательно до 5,а
Seek'ом с позиции.
___________________________________________
например такая структура или класс такой же
C#
1
2
3
4
5
6
7
struct STUDENT 
{ 
public string fio; 
public string FormOfEducation; 
public int course; 
public string faculty; 
}
______________________________________________

И еще,реально ли узнать размер класса(структуры) в байтах,если используется string?
//маршалинг и sizeof размер !!!экземпляра!! не показывает
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.07.2012, 13:17
Ответы с готовыми решениями:

Конвертировать exe в бинарники Linux
У меня есть исполняемый файл exe под Windows я хочу конвертировать этот exe в бинарник который...

Не запускаются бинарники из консоли (детский сад)
Проблема в следующем. Консоль на ввод: su root aptitude install *название пакета* отвечает: ...

Пути, куда складывать готовые бинарники
Собираюсь делать проект, который будет состоять из главного модуля (exe) и нескольких подключаемых...

Где можно выложить freeware бинарники ?
Что бы простой пользователь мог скачать и пользоваться. Гитхаб для этого использовать как то...

18
Эксперт .NET
17688 / 12873 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
21.07.2012, 18:30 2
Цитата Сообщение от Noob.net Посмотреть сообщение
Как в бинарник записать несколько классов,а потом считать только один определенный(например 5).То-есть читать не последовательно до 5,а
Seek'ом с позиции.
Используйте метод Seek потока данных.
Но вам придется ограничить максимальный размер экземпляра, если вы хотите воспользоваться таким методом.

Цитата Сообщение от Noob.net Посмотреть сообщение
И еще,реально ли узнать размер класса(структуры) в байтах,если используется string?
Размер структуры или класса - это, грубо говоря, сумма размеров его полей.
В вашем примере размер структуры STUDENT будет 128 или 224 байт, в зависимости от того, на какой системе она используется: x86 или x64.
Даже если fio ссылается на текст размером в 20Мб, размер структуры все равно останется тот же. О чем вам с радостью сообщит оператор sizeof.

Ну, можете в самой структуре создать метод, где будет подсчитываться общее количество памяти, занимаемой всеми объектами, на которые ссылаются ее поля.
1
Почетный модератор
Эксперт .NET
8721 / 3673 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
21.07.2012, 20:14 3
kolorotur, размер структуры будет 16 и 24 байта для 32 и 64 битного процесса соответственно, тут string это ссылка (OBJREF).
Noob.net, добавьте в структуру 4 поля типа int: длина в байтах всей структуры и длина каждого поля типа string, тогда когда будете читать файл прыгайте (смещайтесь) по файлу используя общий размер структуры.
1
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
21.07.2012, 20:46 4
Noob.net, я бы воспользовался XML. Если ничего хитро шифровать не надо, то с ним довольно удобно работать.
0
Темная сторона .Net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
21.07.2012, 22:09  [ТС] 5
Цитата Сообщение от Psilon Посмотреть сообщение
Noob.net, я бы воспользовался XML. Если ничего хитро шифровать не надо, то с ним довольно удобно работать.
Нет нужны бинарные файлы так как на 1 место быстродействие и минимизация занимаемой памяти
(понимаю не совсем к шарпу,но здесь другие мотивы и плюсы)


вот здесь например

string
час-мин 1 1 true = 18 байт= (описание строки)1байт + 14(? что тут?) + (ushort)1байт + (byte)2 байта + (bool)1 байт

а структура занимает 12 байт через Маршал.СайзОфф - так как стринг ссылка только


Цитата Сообщение от kolorotur Посмотреть сообщение
Ну, можете в самой структуре создать метод, где будет подсчитываться общее количество памяти, занимаемой всеми объектами, на которые ссылаются ее поля.
метод всегда показывает размер ссылки стринга а записывается то само значение "класса" насколько я понимаю.

Цитата Сообщение от SSTREGG Посмотреть сообщение
Noob.net, добавьте в структуру 4 поля типа int: длина в байтах всей структуры и длина каждого поля типа string, тогда когда будете читать файл прыгайте (смещайтесь) по файлу используя общий размер структуры.
спасибо)
реально за 2 дня не нашел хотя бы намека на это,а сам не догадаюсь=(

Цитата Сообщение от kolorotur Посмотреть сообщение
Используйте метод Seek потока данных.
Но вам придется ограничить максимальный размер экземпляра, если вы хотите воспользоваться таким методом.
тоесть у меня будет что-то типа
C#
1
2
3
4
5
6
7
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode, Pack = 1)]
public struct FileRecord
{
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 56)]
    public char[] ID;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 56)]
    public char[] Name;
?????

возможно ли обойтись без unmanaged кода?
0
Эксперт .NET
17688 / 12873 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
21.07.2012, 22:15 6
Цитата Сообщение от SSTREGG Посмотреть сообщение
размер структуры будет 16 и 24 байта для 32 и 64 битного процесса соответственно
Ну разумеется - это я цифру написал в битах, а подписал как байты (16*8=128, 28*8=224)
Только на х64 будет не 24 байта, а 28 (+4 на инт).

Цитата Сообщение от Noob.net Посмотреть сообщение
метод всегда показывает размер ссылки стринга а записывается то само значение "класса" насколько я понимаю.
Разумеется, потому я и пишу о создании отдельного метода, который будет считать количество байт, занимаемых каждой строкой при кодировке UTF-16.

Цитата Сообщение от Noob.net Посмотреть сообщение
возможно ли обойтись без unmanaged кода?
Возможно.
Но, повторюсь, вам придется сделать размер структуры фиксированным, ограничив максимальное количество символов в каждой строке.
В самой структуре можно вообще хранить char[], а открытыми сделать свойства, в акцессорах которых будет происходить конвертирование из строки в массив символов фиксированной длины.
1
Темная сторона .Net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
21.07.2012, 22:36  [ТС] 7
Цитата Сообщение от kolorotur Посмотреть сообщение
Но, повторюсь, вам придется сделать размер структуры фиксированным, ограничив максимальное количество символов в каждой строке.
В самой структуре можно вообще хранить char[], а открытыми сделать свойства, в акцессорах которых будет происходить конвертирование из строки в массив символов фиксированной длин
не проблема,макс размер строки известен.Думал хранить в char[]
+ исп свойства так как будет привязка данных

То-есть если я буду иметь массивы фикс длины,инты,булы и т.д
они в байтах займут именно столько - сколько весят,как описано в структуре МДСН?


C#
1
2
3
4
bw.Write(GetFixedSizeCharArray(s.fio, 15));//массив "чаров"
bw.Write(GetFixedSizeCharArray(s.FormOfEducation, 5));
bw.Write(s.course);
bw.Write(GetFixedSizeCharArray(s.faculty, 10));
мудрецы предложили делать так,за что я благодарю их искренне)

размер структуры в бинарнике будет занимать ровно 34 байта?

//промежуточный вопрос,Строка == массив чаров или массив + размер?


Насчет кодировки,не важно что я выберу или есть какие-то рекомендации?
например в делфях пользовались АНСИ при такой же структуре,
а здесь например взять ЮТФ - 8,юникод думаю лучше не трогать изза (1символ - 2 байта)

Добавлено через 2 минуты
Можно еще вопросик?
Вот я достану эти структуры(все в определенном случае),где мне лучше их хранить
в потоке памяти или можно пользоваться чем-то проще,например List
посоветуйте,пожалуйста)
0
Эксперт .NET
17688 / 12873 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
22.07.2012, 00:21 8
Цитата Сообщение от Noob.net Посмотреть сообщение
То-есть если я буду иметь массивы фикс длины,инты,булы и т.д
они в байтах займут именно столько - сколько весят,как описано в структуре МДСН?
Так точно. Исключение - массивы char, но только в том случае, если вы хотите использовать другую кодировку. По умолчании при сериализации используется UTF-16, где 2 байта на символ.

Цитата Сообщение от Noob.net Посмотреть сообщение
bw.Write(GetFixedSizeCharArray(s.fio, 15));//массив "чаров"
bw.Write(GetFixedSizeCharArray(s.FormOfEducation, 5));
bw.Write(s.course);
bw.Write(GetFixedSizeCharArray(s.faculty, 10));
Эм, что за интересные методы?
Реализуйте эти массивы в кишках структуры и сериализируйте сразу всю структуру - не занимайтесь ерундой

Цитата Сообщение от Noob.net Посмотреть сообщение
размер структуры в бинарнике будет занимать ровно 34 байта?
На примере волшебных методов выше - 64

Цитата Сообщение от Noob.net Посмотреть сообщение
промежуточный вопрос,Строка == массив чаров или массив + размер?
Если вы о классе System.String, то ни то, ни другое.
В шарпе строки - не совсем то же самое, что в сях.

Цитата Сообщение от Noob.net Посмотреть сообщение
Насчет кодировки,не важно что я выберу или есть какие-то рекомендации?
Для сериализации в бинарный файл лучше используйте UTF-16 - не так экономно по месту, как UTF-8, но зато размер символа всегда известен - можно обращаться к отдельным символам в файле, не напрягаясь.

Цитата Сообщение от Noob.net Посмотреть сообщение
например в делфях пользовались АНСИ при такой же структуре
АНСИ - довольно расплывчатое понятие
В эту категорию входит масса разных кодировок.

Цитата Сообщение от Noob.net Посмотреть сообщение
здесь например взять ЮТФ - 8,юникод думаю лучше не трогать изза (1символ - 2 байта)
А в UTF-8 - от одного до четырех байт на символ, так что в некоторых случаях в файле можно будет хранить строки в два раза короче чем те, которые можно было бы сохранить в UTF-16.

Цитата Сообщение от Noob.net Посмотреть сообщение
Вот я достану эти структуры(все в определенном случае),где мне лучше их хранить
в потоке памяти или можно пользоваться чем-то проще,например List
Всегда рассматривайте поток, как место, куда данные отсылаются или откуда считываются, но не как постоянное хранилище.
Так что List, ага.
1
Темная сторона .Net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
22.07.2012, 00:39  [ТС] 9
Цитата Сообщение от kolorotur Посмотреть сообщение
На примере волшебных методов выше - 64
=) Кодировка была другая) 34байта) или ваш вариант в другой) спасибо)

О строках я понял что это ссылочный тип(пересоздаеться каждый раз и бла бла),а с ваших слов - что ранее читаемая мной инфа была ложью

Цитата Сообщение от kolorotur Посмотреть сообщение
Эм, что за интересные методы?
Реализуйте эти массивы в кишках структуры и сериализируйте сразу всю структуру - не занимайтесь ерундой
Разве шарп разрешает сериализовать всю структуру сразу? 0_о
то-есть,я могу через Бин-Ридер записать сразу всю структуру,а не каждое поле отдельно?
(пример был правильный,там методика другая была) - хотел убедиться в размере) (если по 2 байта - 64)

Или вы имели ввиду заменить "левые методы" сразу на _методы структуры или свойства_?
//тогда вопрос закрыт) а если я ошибаюсь,то ->

Что бы сериализовать целую структуру мне нужна реализовать интерфейс или можно пихать в writer?
Ведь обычной сереализацией\десереализацией здесь не обойдешься так как она пихает много
лишней инфы,а нужен минимальный размер.

З.Ы.
Если наглею - извините,в mdsn сухая инфа,в нете мало,вот на форумах только и есть возможность
"живого общение".
0
Почетный модератор
Эксперт .NET
8721 / 3673 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
22.07.2012, 00:57 10

Не по теме:

kolorotur, да, обсчитался )


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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Text;
using System.Windows.Forms;
 
namespace WindowsFormsApplication4
{
    public partial class Form1 : Form
    {
        class STUDENT
        {
            public string fio;
            public string FormOfEducation;
            public int course;
            public string faculty;
 
            public void Save ( BinaryWriter bw )
            {
                long old_pos = bw.BaseStream.Position;
                long ret_pos = 0L;
 
                bw.Write( 0 );
                bw.Write( fio );
                bw.Write( FormOfEducation );
                bw.Write( faculty );
                bw.Write( course );
 
                ret_pos = bw.BaseStream.Position;
                bw.BaseStream.Position = old_pos;
                bw.Write( (int)(ret_pos - old_pos - 4L) );
                bw.BaseStream.Position = ret_pos;
            }
 
            public void Load ( BinaryReader br )
            {
                br.BaseStream.Position += 4L; // пропускаем total_sz
                fio = br.ReadString();
                FormOfEducation = br.ReadString();
                faculty = br.ReadString();
                course = br.ReadInt32();
            }
        }
 
        static void SaveStudents ( List<STUDENT> items )
        {
            using ( var bw = new BinaryWriter(
                                    File.Open( "data.bin", FileMode.Create ),
                                    Encoding.Default ) )
            {
                bw.Write( items.Count );
 
                foreach ( var item in items )
                    item.Save( bw );
            }
        }
 
        static List<STUDENT> LoadStudents ( )
        {
            var lst = new List<STUDENT>();
 
            using ( var br = new BinaryReader(
                                File.Open( "data.bin", FileMode.Open ),
                                Encoding.Default ) )
            {
                int count = br.ReadInt32();
 
                for ( int i = 0; i < count; ++i )
                {
                    var stud = new STUDENT();
                    stud.Load( br );
 
                    lst.Add( stud );
                }
            }
 
            return lst;
        }
 
        static STUDENT LoadStudent ( int index )
        {
            using ( var br = new BinaryReader(
                                File.Open( "data.bin", FileMode.Open ),
                                Encoding.Default ) )
            {
                int count = br.ReadInt32();
                int currItemSz = 0;
 
                if ( count <= index )
                    return null;
 
                for ( int i = 0; i < count; ++i )
                {
                    if ( i == index )
                    {
                        var stud = new STUDENT();
                        stud.Load( br );
                        return stud;
                    }
 
                    currItemSz = br.ReadInt32();
 
                    br.BaseStream.Position += currItemSz;
                }
            }
 
            return null;
        }
 
        public Form1 ( )
        {
            InitializeComponent();
 
            if ( false )
            {
                var items = new List<STUDENT>();
 
                for ( int i = 0; i < 10; ++i )
                {
                    items.Add(
                        new STUDENT() {
                            course = i * 2,
                            faculty = "fac " + i,
                            fio = "fio " + i,
                            FormOfEducation = "foe " + i
                        } );
                }
 
                SaveStudents( items );
            }
            else
            {
                var list = LoadStudents();
                var stud = LoadStudent( 5 );
            }
        }
    }
}
1
Эксперт .NET
17688 / 12873 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
22.07.2012, 00:57 11
Цитата Сообщение от Noob.net Посмотреть сообщение
Кодировка была другая) 34байта)
В смысле "другая"?
Если возвращается массив char, как написано в комментарии, то используется UTF-16, а значит 2 байта на символ.

Цитата Сообщение от Noob.net Посмотреть сообщение
Разве шарп разрешает сериализовать всю структуру сразу? 0_о
то-есть,я могу через Бин-Ридер записать сразу всю структуру,а не каждое поле отдельно?
Конечно.
Можно использовать BinaryFormatter, например.
Правда, он добавляет несколько лишних байт для информации о типе.

Цитата Сообщение от Noob.net Посмотреть сообщение
Или вы имели ввиду заменить "левые методы" сразу на _методы структуры или свойства_?
Ага, именно это.

Цитата Сообщение от Noob.net Посмотреть сообщение
Ведь обычной сереализацией\десереализацией здесь не обойдешься так как она пихает много
лишней инфы,а нужен минимальный размер.
В этом случае можно тупо замаршаллить структуру в массив байтов и уже этот массив так же тупо записывать в файл - никакой лишней информации.
2
352 / 331 / 49
Регистрация: 12.12.2011
Сообщений: 563
22.07.2012, 06:42 12
Вот класс, писал для себя но с вами естественно поделюсь, маршалит структуру в массив байт и обратно
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    public static class StructureSerializeHelper
    {
        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 val) where T : struct 
        {
            int size = Marshal.SizeOf(val);
            IntPtr ptPoint = Marshal.AllocHGlobal(size);
            Marshal.StructureToPtr(val, ptPoint, true);
            byte[] bff = new byte[size];
            Marshal.Copy(ptPoint, bff, 0, size);
            Marshal.FreeHGlobal(ptPoint);
            return bff;
        }
    }
При этом нужно описать структуру примерно вот так
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
    struct STUDENT
    {
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)]
        public string FIO;
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)]
        public string FormOfEducation;
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
        public string Faculty;
        public short Course;
 
        public STUDENT(string fio, string form, string faculty, short course)
        {
            FIO = fio;
            FormOfEducation = form;
            Faculty = faculty;
            Course = course;
        }
    }
и использовать так
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
STUDENT stud = new STUDENT("asd aaa ssss", "day", "prog", 1);
byte[] data = StructureSerializeHelper.StructToByte(stud);
using (BinaryWriter writer = new BinaryWriter(new FileStream("bin.dat", FileMode.Create)))
{
    writer.Write((short)data.Length);
    writer.Write(data);
}
STUDENT student;
using (BinaryReader reader = new BinaryReader(new FileStream("bin.dat", FileMode.Open)))
{
    int len = reader.ReadInt16();
    byte[] buffer = reader.ReadBytes(len);
    student = StructureSerializeHelper.ByteToStruct<STUDENT>(buffer);
}
2
Темная сторона .Net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
22.07.2012, 13:41  [ТС] 13
Всем спасибо)
Очень помогли) сегодня спал спокойно

Добавлено через 3 часа 3 минуты
При маршаллинге я так понимаю скорость работы с бинарником упадет?

И если я начинаю писать с определенного байта в файле то я перезаписываю последующие байты
или дописываю перед ними новые?
0
Эксперт .NET
17688 / 12873 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
22.07.2012, 13:47 14
Цитата Сообщение от Noob.net Посмотреть сообщение
При маршаллинге я так понимаю скорость работы с бинарником упадет?
Не значительно.

Цитата Сообщение от Noob.net Посмотреть сообщение
И если я начинаю писать с определенного байта в файле то я перезаписываю последующие байты
или дописываю перед ними новые?
Перезаписываете последующие.
1
Темная сторона .Net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
22.07.2012, 20:28  [ТС] 15
Опять теряю байты..

C#
1
2
3
4
5
6
7
8
9
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
  struct Test
        {
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)] 
            public string Name; //20
            public ushort Field1; //1
            public byte Fiel2;  //2
            public bool Activate; //1
        }
а в бинарнике постоянно 27,на что идут остальные 5?
 Комментарий модератора 
Используйте теги форматирования кода! [CSHARP]Здесь код[/CSHARP]
0
Почетный модератор
Эксперт .NET
8721 / 3673 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
22.07.2012, 20:37 16
C#
1
2
3
4
5
6
7
8
9
10
11
Marshal.SizeOf(typeof(bool)) // == 4
//
        [StructLayout( LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1 )]
        struct Test
        {
            [MarshalAs( UnmanagedType.ByValTStr, SizeConst = 20 )]
            public string Name; //20
            public ushort Field1; //2
            public byte Fiel2;  //1
            public bool Activate; //4
        }
C#
1
2
3
4
5
6
7
8
9
10
        [StructLayout( LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1 )]
        struct Test
        {
            [MarshalAs( UnmanagedType.ByValTStr, SizeConst = 20 )]
            public string Name; //20
            public ushort Field1; //2
            public byte Fiel2;  //1
            [MarshalAs( UnmanagedType.I1 )]
            public bool Activate; //1
        }
0
Темная сторона .Net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
22.07.2012, 20:44  [ТС] 17
То-есть происходит выравнивание последнего типа?

Добавлено через 1 минуту
Есть еще нюансы с какими-то типами которые следует знать?
Или лучше каждое поле отмечать Маршалом?
0
Почетный модератор
Эксперт .NET
8721 / 3673 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
22.07.2012, 20:53 18
Noob.net, оно не выравнивается, размер bool при маршалинге равен 4 байтам по умолчанию(, т.е. соответствует типу BOOL в Win32).

На счет особенностей как таковых (для себя) нюансов не замечал, наверное только баг, я его описывал здесь, в разделе 4.3 StructLayout.
1
Темная сторона .Net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
22.07.2012, 20:57  [ТС] 19
Спасибо) не нашел так бы)
0
22.07.2012, 20:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.07.2012, 20:57
Помогаю со студенческими работами здесь

Как (скриптом?) загнать в акцесс несколько тысяч картинок (бинарники)?
Сабж.


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru