Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> BitArray сериализуемый в число (long) 
:(
    Опции темы
anls
Дата 26.7.2011, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 27.6.2011

Репутация: нет
Всего: нет



Здравствуйте.

Задача следующая:

Необходимо Сделать отдельный битовый класс сериализуемый в число (long).

Как это можно сделать?

Это сообщение отредактировал(а) anls - 26.7.2011, 15:25
PM MAIL   Вверх
mr.DUDA
Дата 27.7.2011, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Вариант: завернуть BitVector в свой класс/структуру, сериализуемую через ISerializable. Выставить наружу нужные методы/свойства BitVector-а.

Другой вариант - написать свой аналог битвектора, там всё достаточно тривиально делается если тип данных известен.


--------------------
user posted image
PM MAIL WWW   Вверх
anls
Дата 27.7.2011, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 27.6.2011

Репутация: нет
Всего: нет



Цитата(mr.DUDA @ 27.7.2011,  11:15)
Вариант: завернуть BitVector в свой класс/структуру, сериализуемую через ISerializable. Выставить наружу нужные методы/свойства BitVector-а.

Другой вариант - написать свой аналог битвектора, там всё достаточно тривиально делается если тип данных известен.

А есть пример кода, сталкиваюсь с этим в первый раз.
PM MAIL   Вверх
mr.DUDA
Дата 27.7.2011, 18:57 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Можно так:
Код
using System;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;

[Serializable]
public class BitArray
{
    long value_;

    public BitArray() { }

    public bool this[int bitIndex]
    {
        get { return ((value_ >> bitIndex) & 1) == 1; }
        set
        {
            if (value)
                value_ |= 1L << bitIndex;
            else
                value_ &= ~(1L << bitIndex);
        }
    }

    public override string ToString()
    {
        string ret = "";
        for (int i = 63; i >= 0; i--)
            ret += (this[i] ? '1' : '0');
        return ret;
    }
}

class Program
{
    public static void Main()
    {
        BitArray arr = new BitArray();
        Console.WriteLine(arr);

        arr[63] = true;
        Console.WriteLine(arr);

        arr[2] = true;
        Console.WriteLine(arr);

        arr[2] = false;
        Console.WriteLine(arr);

        arr[4] = true;
        arr[16] = true;

        var stream = new MemoryStream();
        var fmt = new BinaryFormatter();
        fmt.Serialize(stream, arr);
    }
}


Единственное, если понадобится потом десериализовать поток в обычный long - не получится т.к. вместе с данными сериализуется и информация о классе.


--------------------
user posted image
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.1106 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.