![]() |
Как представить ushort двумя байтами?
Доброго дня товарищи. Ситуация такая , что не могу нагуглить, т.к. не знаю, что это за операция такая.
В общем - есть у меня переменная, 2 байта (пущай будет ushort), и для наглядности, значение у нее - 0xFFAA. Суть в том, что я не хочу переменную длиной два байта, я хочу два байта. Байт а, со значением 0xFF и байт b со значением AA. Что же я пробовал для этого сделать? Собственно, для переменной b все просто - я сдвигаю все это дело вправо, дабы выгнать AA за границу "двух байт", и первые 8 разрядов заполнить нулями. А вот для переменной b (той что AA), я извращаюсь так - сначала сдвигаю влево, чтобы выгнать FF за левую границу, а после, чтобы не было 8 значимых нулей, сдвигаю вправо :-D. Ну вроде логично с точки зрения начинающего. Однако во второй операции, те 8 бит FF, что я сдвинул, при втором сдвиге "возвращаются" О_о (что за на***) Код:
ushort a = (ushort)(0xFFAA >> 8); // выгнал AA за край, получил FF - все хорошо Прав ли я в своих операциях, и FF "возвращается" (что за бредятина)), или же где то кроется ошибка. Собственно, почему у меня не вышло, и как ushort (16 бит) порезать на 2 переменные типа byte (8 бит)? P.s. я могу предположить, что при сдвиге влево .NET выделяет еще два байта, и посему у меня нифига не выходит (простая логика подсказывает) Но почему я не могу сдвигать за левую границу, если могу за правую??? |
В С/С++ это делается при помощи объединения:
union TwoBytes { unsigned short Value; char Byte1, Byte2; }; Как с этим обстоит у Microsoft, извините, не знаю. |
Нарыл вот такую штуку : побитовая маска
Вроде вот при таком подходе - получается Код:
byte b = (byte)(0xFFAA & 0x00FF); Код:
0000 0000 1111 1111 (маска) Есть конечно предположения, что при сдвиге влево, выделяется еще 2 байта (до int32 unsigned) и после приводятся (ushort). Однако, хотел бы услышать мнение хорошего человека знающего c# Цитата:
|
Время: 08:19. |
Время: 08:19.
© OSzone.net 2001-