Битовая маска с прямым порядком байтов - PullRequest
1 голос
/ 21 января 2011

Это не столько вопрос, сколько проверка работоспособности!

Если вам нужно было прочитать 4 байта в Java как битовую маску в Big endian, и эти байты были:

0x00, 0x01, 0xB6, 0x02.

Превращение в int будет: 112130

Двоичный файл будет: 00000000000000011010011000000010

Порядковый номер последовательности байтов не будетповлияет на положение бита, не так ли?

Спасибо

Тони

Ответы [ 3 ]

1 голос
/ 21 января 2011

В общем, если то, из чего вы читаете, дает вам целые байты, тогда вам не нужно беспокоиться о порядке битов, составляющих эти байты: важен только порядок байтов, так как Вы правильно предполагаете.

Время, когда вам, возможно, придется беспокоиться об «порядковости» отдельных битов, - это когда вы фактически читаете / записываете поток битов, а не целые байты (например, если вы писали алгоритм сжатия, работающий на уровне бит вам нужно будет решить, в каком порядке записывать биты).

1 голос
/ 21 января 2011

Endian-ness отражает порядок байтов, но не порядок битов в этих байтах.

Допустим, я хочу представить (двухбайтовое) слово 0x9001.Если я просто наберу это в двоичном виде, это будет 1001000000000001.

Если я дам дамп байтов (от младшего адреса к старшему) на машине с прямым порядком байтов, я бы увидел 10010000 00000001.

Если я дам дамп байтов (от младшего адреса к старшему) на машине с прямым порядком байтов, я бы увидел 00000001 10010000.

0 голосов
/ 21 января 2011

Единственное, на что вам следует обратить внимание, это то, как именно вы «читаете 4 байта в Java» - вот где важен порядок байтов, и вы можете испортить его (DataInputStream предполагает большой порядок байтов). Как только прочитанное вами значение станет int 112130, вы установите его.

...