Интерпретация каждых 4 битов как шестнадцатеричное значение

У меня возникли проблемы с интерпретацией битов как байтов. Теперь у меня есть строка из 8, 16, 24 и т. Д. Бит, и я хочу преобразовать их в шестнадцатеричные байты. Например:

Допустим, у меня есть следующие строки:

10100101 00110000

И я хочу интерпретировать каждые 4 как шестнадцатеричные байты, чтобы я имел

1010 как A, 0101 как 5, 0011 как 3 и 0000 как 0

Тогда, когда я соберу их вместе, я должен получить

A5 30, что соответствует ¥ 0 на основе их индивидуального шестнадцатеричного значения. Я не совсем уверен, как это сделать, к сожалению. У кого-нибудь может быть идея сделать это? Если так, это было бы здорово! Спасибо!

0

Решение

Эта проблема была уже решено для вас, в стандартной библиотеке C ++ <bitset> заголовок:

const unsigned long value1 = std::bitset<8>(std::string("10100101")).to_ulong();
const unsigned long value2 = std::bitset<8>(std::string("00110000")).to_ulong();

std::cout << std::hex << value1 << " " << std::hex << value2 << '\n';
3

Другие решения

Вы должны преобразовать каждую отдельную группу из 4 битов в один символ, например. со столом:

 char Hex[16]={ '0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};

Общий способ вычисления этого (без библиотек между любыми 2 ОСНОВАНИЯМИ) заключается в следующем:

Шаг 1)

  my_number = 0; // start to read digits.
while((a = read_digit(BASE))>=0) {
// read_digit should return -1 for non digit
my_number=my_number * BASE + a;
// optionally: if (count++ == 4) break;  /* read only 4 bits or digits */
}

Шаг 2)

  // convert my_number to another base (eg. hex or decimal or octal or Base64)
// by repeated division by BASE and storing the modulus
while (my_number) {
int modulus = my_number % BASE;
my_number/=BASE;
PUSH(modulus);
}

Шаг 2.5)

  // Pop the numbers in range (0..BASE-1) from stack
// to output them from left to right
while (POP(my_number) >=0) {     // assumes that pop returns <0 when empty
cout << myTable[my_number];  // this can be selected for any base
}
1

По вопросам рекламы [email protected]