2013-10-14 3 views
1

У меня есть 32-байтовое целое число в шестнадцатеричном формате, например: 0xAB CD 12 34 AB CD 12 34 AB CD 12 34 AB CD 12 34 AB CD 12 34 AB CD 12 34 AB CD 12 34 AB CD 12 34Обработка 32 байт целого числа в шестнадцатеричном формате

Как отобразить ее на базу 2 обозначения? Я не совсем понимаю, как реализовать int в данном формате.

+0

Hex - всего лишь один из способов отображения числового значения. Вы можете так же легко отобразить его как десятичную (базовую 10), восьмеричную (базовую 8) или любую базу, которую вы выберете. Если этот номер хранится на устройстве, использующем двоичную память, он уже является базой 2, поэтому ваш вопрос неясен. Вы просто хотите отобразить его значение в двоичной нотации? –

+0

@CareyGregory: Да, я хочу отобразить его базовый эквивалент. –

+0

Какой язык/инструмент вы используете? – arshajii

ответ

0

Это C++, но он должен дать вам эту идею.

unsigned char bytes[32] = { 0xAB, 0xCD, 0x12, 0x34, 0xAB, 0xCD, 0x12, 0x34, 0xAB, 0xCD, 0x12, 0x34, 0xAB, 0xCD, 0x12, 0x34, 0xAB, 0xCD, 0x12, 0x34, 0xAB, 0xCD, 0x12, 0x34, 0xAB, 0xCD, 0x12, 0x34, 0xAB, 0xCD, 0x12, 0x34 }; 

for (int i = 0; i < 32; i++) 
{ 
    unsigned char byte = bytes[i]; 
    for (int j = 0; j < 8; j++) 
    { 
     printf("%u", (byte & 0x80) >> 7); 
     byte <<= 1; 
    } 
} 
+0

Итак, в конце концов, у меня будет 256 '0' 'и' 1''? –

+0

@PalakArora - Да. 32 байта x 8 бит = 256. –

0

Возьмите каждую цифру шестнадцатеричного числа и преобразуйте ее в двоичное (базовое-2) число, используя хеш-таблицу, то есть A станет 1010b. Двоичное число должно содержать нули, добавленные слева, так что это должно быть 4 символа, то есть оно должно быть «11», не «0011». Вы можете использовать массив, но вам придется взять порядковый номер символа, а если он равен или ниже 57, то вычесть 48 (так что «9», порядковый номер 57 станет целым числом 9). Точно так же нижние значения станут соответствующим целым числом. Но «A» находится в ординале 65, поэтому, если ординал выше или равен 65, то вычтите 50, так что «A» станет целым числом 10. Ваш массив будет "0000", "0001", "0010", "0011", "100", ..., так что когда любое целое индексируется, соответствующий двоичное (base-2) представление будет возвращено.

+0

Таким образом, номер базы-2 (в приведенном выше случае) будет содержать 256 символов, состоящих из '0' 'и' 1 's? –

+0

@PalakArora Yup, каждая цифра в шестнадцатеричной форме имеет 16 возможных значений, поэтому для каждой шестнадцатеричной цифры будет 4 двоичных цифры, и, таким образом, двоичное представление будет использовать 256 символов. Возможно, вам захочется прочитать эту запись Simple Wikipedia: https://simple.wikipedia.org/wiki/Base_(mathematics) –

0

Я думаю, вам просто нужно знать, как преобразовать hex в двоичный.

Если вы используете Windows (7), просто откройте калькулятор, задайте представление программисту, выберите «Hex», введите свой номер, затем выберите «bin» или просто просмотрите обновление дисплея.

Если вы используете * ix, запустите bc и введите ibase=16, obase=2, затем просто введите свой номер и нажмите enter.

В общем, вы действительно должен знать, что означает шестнадцатеричный и двоичный. Если вы не можете конвертировать из одного в другое для базовых значений 0-15, вы пропустили большинство основных компонентов программиста. Это важно понять. Binary - численная система, на которой основана почти вся цифровая логика, состоит только из 0s и 1s. Hex - это просто сокращение двоичного кода. Вместо сохранения base2 вы храните base16. Поскольку 16 = 2^4, вы можете сконденсировать 4 бита в один шестнадцатеричный код.

0x0 = 0000 = 0 
0x1 = 0001 = 1 
0x2 = 0010 = 2 
0x3 = 0011 = 3 
0x4 = 0100 = 4 
0x5 = 0101 = 5 
0x6 = 0110 = 6 
0x7 = 0111 = 7 
0x8 = 1000 = 8 
0x9 = 1001 = 9 
0xA = 1010 = 10 
0xB = 1011 = 11 
0xC = 1100 = 12 
0xD = 1101 = 13 
0xE = 1110 = 14 
0xF = 1111 = 15 
Смежные вопросы