2016-02-27 10 views
0

В настоящее время я пишу простую программу для преобразования строки в base64, манипулируя ее битовыми значениями.Строка Двоичное преобразование

Если я использую функцию битового набора для преобразования строки в ее битовые значения, как я могу манипулировать или хранить эти значения?

Например, если я делаю это:

std::cout << bitset<8>(cstring[i]) << std::endl; 

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

Более конкретно, я хотел бы сгруппировать бит в группы размером 6 и изменить значение этих групп на значение int. Любая помощь приветствуется, спасибо!

ответ

0

Я бы порекомендовал, чтобы вместо использования bitset вы просто выполнили преобразование в base64 старомодным способом. Возьмите три входных байта, как unsigned char s, и используйте простые побитовые сдвиги с помощью поиска таблицы, чтобы преобразовать их в base64.

Это не очень сложно. Если

unsigned char a, b, c; 

Ваши входные байт, то, (делают это из памяти):

int b1= (a >> 2); 

int b2= ((unsigned char)((a & 0x03) << 4)) | (unsigned char)(b >> 4); 

int b3= ((unsigned char)((b & 0x0F) << 2)) | (unsigned char)(c >> 6); 

int b4= c & 0x3F; 

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

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

+0

Да, это мой первый раз, работая напрямую с байтами. Я начал думать, что, возможно, я должен использовать операторов для выполнения этой задачи, но я думал, что может быть другой способ. Спасибо за совет, хотя, я буду растрескиваться на этом – calmeishmael

 Смежные вопросы

  • Нет связанных вопросов^_^