Как преобразовать длинную в 16-битную двоичную строку фиксированной длины? - PullRequest
5 голосов
/ 12 апреля 2010

Привет, я хочу преобразовать длинное целое в двоичное, но проблема в том, что я хочу получить фиксированный 16-битный двоичный результат после преобразования, например, если я преобразую 2-16-битный двоичный код, это должно дать мне 0000000000000010, так как кто-нибудь может мне помочь?*

Ответы [ 8 ]

21 голосов
/ 12 апреля 2010

Скорее всего, вы хотите Integer.toBinaryString() в сочетании с чем-то, чтобы вы получили ровно 16 мест:

int val = 2;
String bin = Integer.toBinaryString(0x10000 | val).substring(1);

Идея здесь состоит в том, чтобы получить заполнение нулями, поставив 1 на 17-е место вашего значения, а затем с помощью String.substring() отрубить ведущий 1, который создается, таким образом, всегда давая вам точно 16 двоичных цифр. (Это работает, конечно, только когда вы уверены, что ввод является 16-битным числом.)

4 голосов
/ 12 апреля 2010

Я предполагаю, что вам нужен вывод String фиксированной длины (16). Вот как будет выглядеть код:

String binarized = Integer.toBinaryString(i);
int len = binarized.length();
String sixteenZeroes = "00000000000000000";
if (len < 16)
  binarized = sixteenZeroes.subString(0, 16-len).concat(binarized);
else
  binarized = binarized.subString(len - 16);
return binarized;

Предупреждение: я не скомпилировал и не запустил его, поэтому убедитесь, что там нет ошибок:)

3 голосов
/ 12 апреля 2010

В отличие от многих предложений здесь: Integer.toBinaryString, не работает для 16-битного (короткого) и не будет печатать начальные нули. Причина в том, что (как следует из названия) это будет работать только для целых чисел. А для отрицательных чисел представление битов изменится (первый бит указывает отрицательное число). Два числа ниже представляют одно и то же число вкратце и int. Поэтому, если вы хотите представить необработанные биты, которые вы получили (это общее применение вашей проблемы), эта функция сгенерирует странный вывод.

decimal: -3
short:                     1111 1111 1111 1101
int:   1111 1111 1111 1111 1111 1111 1111 1101

РЕДАКТИРОВАТЬ: изменилось число выше

Следовательно, вы не можете разыграть шорт, если вас интересует бит.

Java для краткости не предоставляет реализацию, поэтому вам придется предоставить свою собственную. Примерно так (размер - это количество бит):

int displayMask = 1 << (size - 1);
StringBuffer buf = new StringBuffer( size);
for ( int c = 1; c <= size; c++ ) 
{
    buf.append( ( value & displayMask ) == 0 ? '0' : '1' );
    value <<= 1;
}
1 голос
/ 18 февраля 2014

Я должен был сделать это для 32-битного числа и в итоге получил:

String stringWord = Long.toBinaryString(word);
while (stringWord.length() < 32) // ensure that length of word is 32
        stringWord = "0" + stringWord;
1 голос
/ 12 апреля 2010

С точки зрения алгоритма преобразования чисел base10 в двоичные, я лично считаю следующее довольно простым:

char[] array;

for (i; i < 16; i++)
{
    if (yourNumber % 2 == 0)
          array[16-i] = '0';
    else if (yourNumber % 2 == 1)
          array[16-i] = '1';
    yourNumber = yourNumber / 2;
}

Если хотите, вы можете преобразовать массив символов в строку.

1 голос
/ 12 апреля 2010

Integer.toBinaryString преобразует int в двоичное представление в виде строки.

Он не дает начальных нулей, поэтому, если вам действительно нужна строка, чтобы иметь их и иметь 16 бит, вы можете просто добавить их самостоятельно.

Ты должен знать, как это сделать.


Обратите внимание, что int на самом деле 32-битный в Java. Вы также должны знать, как работает два дополнения. Например, двоичное представление -1 составляет 32 1 с.

0 голосов
/ 12 апреля 2010

если вы хотите двоичное представление long, то в объекте Long есть метод для этого:

String Long.toString(long i, int radix);

с основанием 2, у вас должно быть двоичное представление.

привет
Гийом

0 голосов
/ 12 апреля 2010

Двоичный - это представление, а не формат для преобразования целого числа в. Например, если у вас есть целое число:

int i = 2;

Двоичное представление будет 00000010. Java имеет только целые числа со знаком, так что эта ссылка будет полезна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...