Как преобразовать биты в байты?

Если у меня есть x-битное значение, представленное как 1 и 0, представляющее истину и ложь соответственно. Как мне преобразовать их в 8-битные байты? Я не хочу знать, как преобразовать количество бит в количество байтов (x/8). Я хочу знать, как преобразовать что-то вроде этого:

10000010 в байт

or

100000101000001 в поплавок


person TimeCoder    schedule 21.05.2011    source источник


Ответы (3)


Вопрос спорный (без дополнительной информации). Биты могут быть представлены в нескольких порядках (порядках байтов), причем младший бит идет первым или последним. У вас должен быть определенный порядок следования байтов. Как только вы переходите от одиночных байтов к словам, вопрос с порядком байтов становится еще более сложным, поскольку порядок битов может отличаться от порядка байтов.

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

Переносимый код будет использовать определенные представления (сетевой порядок, printf и т. д.) и держаться подальше от попыток вручную упаковать биты.

person Seth Robertson    schedule 21.05.2011
comment
Мысль о том, что это был прямой или прямой порядок байтов, повлияла только на порядок байтов. - person TimeCoder; 21.05.2011

bytes[byteIndex] |= (byte)(1 << (7-bitIndex));

Ссылаться на:

Как преобразовать биты в байты?

person danyolgiax    schedule 21.05.2011
comment
Я имел в виду математический метод, а не программный. И если вы предоставляете программное решение, пожалуйста, дайте какое-то объяснение - person TimeCoder; 21.05.2011

Итак, я предполагаю, что вы хотите преобразовать 1 в 1, 10 преобразовать в 2, 11 преобразовать в 3 и т. д., 1001011 преобразовать в 1 * 2 ^ 0 + 1 * 2 ^ 1 + 0 * 2 ^ 2 + 1 * 2 ^3 + 0*2^4+ 0*2^5 + 1*2^6 = 75

РЕДАКТИРОВАТЬ: например, с помощью JavaScript:

function binarytodecimal(input,l)
                    {
                    var i=0;
                    var dec=0;
                    while (i<l)
                        {
                            var temp1 = parseInt(input.charAt(l-1-i));
                            dec = dec + temp1*Math.pow(2,i);
                            i++;
                        }
                    dec = dec+'';
                    return dec;
                    }
person Thomas    schedule 21.05.2011