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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Байты в биты 
:(
    Опции темы
arkonst
Дата 28.11.2007, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Здравствуйте коллеги!

Подскажите пожалуйста,каким образом можно байт разложить на составляющие биты. 1байт в 8 бит???
допустим у меня есть число 7 в 8-битном формате 00000111, каким образом можно было бы с помощью языка C# вытащить эти три единицы чтобы затем их использовать ...

Заранее спасибо за ответ.
PM MAIL   Вверх
nikakoi
Дата 28.11.2007, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Побитовыми операторами >> и << пользоваться не пробовал?smile
PM MAIL   Вверх
1stain
Дата 28.11.2007, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 486
Регистрация: 30.7.2007
Где: Киев - Харьков

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



поиском пользоваццо не прбовал?
ПОИСК РУЛИТ!!!


--------------------
Все знают, что это невозможно. Но вот приходит невежда, которому это неизвестно - он-то и делает открытие. (Albert Einstein)
user posted image
PM MAIL   Вверх
arkonst
Дата 28.11.2007, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



да в общем то пробовал....но эти ж операторы сдвигают биты туда сюда....а как именно разложить байт в биты...а точнее из 8 бит вытянуть нужные и затем использовать...я новичок в программировании поэтому и спрашиваю....и жду ответа а не стеба
PM MAIL   Вверх
nikakoi
Дата 28.11.2007, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Код

BYTE x = 7;

for(int i = 0; i < 8; i++)
{
  if((x & 1 << i) == 0) 
  {
     smth;
  }
}


Ну кажется вот так можно понять где единицы и где нули=)

Добавлено через 1 минуту и 10 секунд
Если я конечно ничего не напутал... Что вполне вероятно, ибо сам довольно недавно на C# пишу)
а как ты их использовать хочешь?)
PM MAIL   Вверх
arkonst
Дата 28.11.2007, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Я пишу программу для работы с устройством в modbus протоколе....так вот...у меня есть функции для чтения holding и input(байты-аналоговые величины)), а вот для чтения coil и discret(биты-дискретные ) нет.

В modbus есть такая функция - 01 она для чтения Coil. ЕЕ я и пытаюсь реализовать, на основе функции для чтения holding (03) , в этой функции используються операции для работы с байтами. А мне как раз чтобы получить состояния Coil нужно сначала вытащить байт из сообщения modbus, затем разложить его на составляющие биты....они и будут являться битами состояния выходов устройства, а затем их уже вывести на форму,типа SCADA получаеться...только для одного устройства...
PM MAIL   Вверх
1stain
Дата 28.11.2007, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 486
Регистрация: 30.7.2007
Где: Киев - Харьков

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



arkonst, чесно сказать мало что понял, дурак наверное  smile 
могу предложить такой вариант: не заморачиваться с >> & <<, а преобразовывать байт в экземпляр перечисления с атрибутом [Flags]
проще это показать на примере:
Код

    [Flags]
    enum TipaSCADAonlyForOneDeviceEnum : byte
    {
        NOTHING = 0,

        FIRSTBIT = 0x01,
        SECBIT = 0x02,
        THIRDBIT = 0x04,
        FOURTHBIT = 0x08,
        FIFTHBIT = 0x10,
        SIXTHBIT = 0x20,
        SEVENTHBIT = 0x40,
        EIGTHBIT = 0x80

        //можно и так
        //,FIRST_and_THIRD = 0x5
    }

    static void Main(string[] args)
    {
        
        byte b = 4;
        byte bb = 7;
        Console.WriteLine(((TipaSCADAonlyForOneDeviceEnum)b).ToString());
        Console.WriteLine(((TipaSCADAonlyForOneDeviceEnum)bb).ToString());

        TipaSCADAonlyForOneDeviceEnum tipaBB = (TipaSCADAonlyForOneDeviceEnum)bb;

        if (tipaBB & TipaSCADAonlyForOneDeviceEnum.THIRDBIT != TipaSCADAonlyForOneDeviceEnum.NOTHING)
            Console.WriteLine("Третий бит установлен");
     }


з.ы. лучше задать экземплярам перечисления соответствующие имена битов протокола


--------------------
Все знают, что это невозможно. Но вот приходит невежда, которому это неизвестно - он-то и делает открытие. (Albert Einstein)
user posted image
PM MAIL   Вверх
arkonst
Дата 29.11.2007, 10:32 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Хорошо...тогда как используя побитовый оператор << >> можно выделить нужный бит....например из 00000111 выделить предпоследнюю единицу,?? желательно на примере.
PM MAIL   Вверх
Freak_FB
Дата 24.4.2008, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ктулхувед
**


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

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



Не понял, зачем [Flags]...
А как насчёт разбить твой байт в BitArray ?
Тут...

Код

BitArray ba = new BitArray(new byte[] { 5 });


Получаем потом каждый бит в виде булевого значения true/false. Типа ba[0] и так дальше.


--------------------
user posted image
user posted image
Тонет Ктулху, все медведы горят в огне.
Я Креведко, очень страшно сегодня мне.

PM MAIL ICQ Skype GTalk Jabber   Вверх
mr.DUDA
Дата 24.4.2008, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Freak_FB, теме полгода уже.  smile 


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


Ктулхувед
**


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

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



Блин... не увидел дату поста... туплю....

Это сообщение отредактировал(а) Freak_FB - 24.4.2008, 12:56


--------------------
user posted image
user posted image
Тонет Ктулху, все медведы горят в огне.
Я Креведко, очень страшно сегодня мне.

PM MAIL ICQ Skype GTalk Jabber   Вверх
mr.DUDA
Дата 24.4.2008, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Freak_FB @  24.4.2008,  12:50 Найти цитируемый пост)
Теме полгода (не, меньше, конечно), но никто же её не удосужился поискать, перед тем как новый топик добавлять. Или я не прав?

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


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

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


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

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


 




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


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

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