Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » .NET - Как представить ushort двумя байтами?

Ответить
Настройки темы
.NET - Как представить ushort двумя байтами?

Новый участник


Сообщения: 8
Благодарности: 0

Профиль | Отправить PM | Цитировать


Доброго дня товарищи. Ситуация такая , что не могу нагуглить, т.к. не знаю, что это за операция такая.
В общем - есть у меня переменная, 2 байта (пущай будет ushort), и для наглядности, значение у нее - 0xFFAA.
Суть в том, что я не хочу переменную длиной два байта, я хочу два байта. Байт а, со значением 0xFF и байт b со значением AA.
Что же я пробовал для этого сделать?
Собственно, для переменной b все просто - я сдвигаю все это дело вправо, дабы выгнать AA за границу "двух байт", и первые 8 разрядов заполнить нулями.
А вот для переменной b (той что AA), я извращаюсь так - сначала сдвигаю влево, чтобы выгнать FF за левую границу, а после, чтобы не было 8 значимых нулей, сдвигаю вправо :-D.
Ну вроде логично с точки зрения начинающего. Однако во второй операции, те 8 бит FF, что я сдвинул, при втором сдвиге "возвращаются" О_о (что за на***)
Код: Выделить весь код
ushort a = (ushort)(0xFFAA >> 8); // выгнал AA за край, получил FF - все хорошо
ushort a = (ushort)((0xFFAA << 8) >> 8); // Выгоняю FF за левый край, и двигаю AA на место - FF возвращается, результат операции - 0xFFAA
Понимаю, что пояснил суть я по детски, но именно так я вижу битовый сдвиг)
Прав ли я в своих операциях, и FF "возвращается" (что за бредятина)), или же где то кроется ошибка.
Собственно, почему у меня не вышло, и как ushort (16 бит) порезать на 2 переменные типа byte (8 бит)?
P.s. я могу предположить, что при сдвиге влево .NET выделяет еще два байта, и посему у меня нифига не выходит (простая логика подсказывает)
Но почему я не могу сдвигать за левую границу, если могу за правую???

Отправлено: 16:11, 05-12-2013

 

Ветеран


Сообщения: 2029
Благодарности: 704

Профиль | Отправить PM | Цитировать


В С/С++ это делается при помощи объединения:
union TwoBytes
{
unsigned short Value;
char Byte1, Byte2;
};
Как с этим обстоит у Microsoft, извините, не знаю.

-------
Господа! Убедительная просьба не обращаться за консультациями в ЛС. Поверьте, создать ветку в соответствующем разделе форума гораздо эффективнее.

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:40, 05-12-2013 | #2



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

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


Новый участник


Сообщения: 8
Благодарности: 0

Профиль | Отправить PM | Цитировать


Нарыл вот такую штуку : побитовая маска
Вроде вот при таком подходе - получается
Код: Выделить весь код
byte b = (byte)(0xFFAA & 0x00FF);
Т.е. насколько я понимаю, он выбирает значимые разряды числа 0xFFAA по маске 0x00FF, или же
Код: Выделить весь код
0000 0000 1111 1111 (маска)
xxxx xxxx |||| ||||
1111 1111 1010 1010 (число)
=
0000 0000 1010 1010 (результат)
Однако второй нюанс вопроса, хотелось бы узнать - почему при побитовом сдвиге, происходит ситуация описанная в первом посте, и как именно она так происходит?
Есть конечно предположения, что при сдвиге влево, выделяется еще 2 байта (до int32 unsigned) и после приводятся (ushort).
Однако, хотел бы услышать мнение хорошего человека знающего c#

Цитата:
В С/С++ это делается при помощи объединения:
Мне нужно одну переменную 2 байта, разложить на 2 (по байту)

Последний раз редактировалось Carmageddon, 05-12-2013 в 16:56.


Отправлено: 16:48, 05-12-2013 | #3



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » .NET - Как представить ushort двумя байтами?

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] как представить MP3 аудио в виде DVD видео Cakc Видео и аудио: обработка и кодирование 8 15-04-2013 17:01
Proxy/NAT - Как настроить сетку между двумя компами TatarinKZ Сетевые технологии 11 31-01-2008 01:31
Переключение раскладки клавиатуры двумя шифтами -- КАК?! Alik_1978 Microsoft Windows 2000/XP 13 05-12-2006 23:24
Как поставить выбор между двумя виндовсами? Mavlyudov Microsoft Windows 95/98/Me (архив) 11 21-12-2004 13:02
Как вставить бит м/у 2 байтами ? Guest Программирование и базы данных 2 10-02-2003 05:33




 
Переход