Манипуляции с битами VB.NET: как извлечь байт из короткого?

Учитывая это короткое (подписано):

&Hxxxx

Я бы хотел:

  • Извлеките самый правильный &HxxFF как SByte (подписанный)
  • Извлеките левый &H7Fxx как байт (без знака)
  • Определите, является ли крайний левый &H8xxx положительным или отрицательным (логический результат)

person Shimmy Weitzhandler    schedule 07.07.2010    source источник
comment
Кстати, самый старший бит равен 0x8000, а не 0xf000.   -  person Mark H    schedule 08.07.2010
comment
Верно. вопрос обновлен.   -  person Shimmy Weitzhandler    schedule 08.07.2010


Ответы (4)


Uh...

value & 0x00ff
(value & 0xff00) >> 8
(value & 0xf000) >= 0

РЕДАКТИРОВАТЬ: я полагаю, вам нужно значение байта, а не только старшие 8 бит.

person MSN    schedule 07.07.2010

Извлеките самый правильный 0xxxff

myShort & 0x00FF

Извлеките левый 0xffxx

(myShort & 0xFF00) >> 8

Определите, является ли крайний левый 0xfxxx положительным или отрицательным (это короткий знак).

(myShort & 0xF000) >= 0;
person Justin Ardini    schedule 07.07.2010

  • Извлеките наиболее правильный &HxxFF как SByte (подписанный)

    CType(s AND &H00FF, SByte)

  • Извлеките левый &H7Fxx как байт (без знака)

    CType((s AND &H7F00) >> 8, Byte)

  • Определите, является ли крайний левый &H8xxx положительным или отрицательным (логический результат)

    s AND &H8000 > 0

Я думаю, что это работает, я давно не работал в VB.

person Guvante    schedule 07.07.2010

person    schedule
comment
@Shimmy - консоль в приложении формы? именно поэтому я использую Debug, неважно, форма это или консоль. - person dbasnett; 08.07.2010
comment
неважно, я также отформатировал код в соответствии с vb 10, если вы заметили, что также является причиной, по которой я редактировал - person Shimmy Weitzhandler; 08.07.2010