Строка байта в шестнадцатеричную строку

0

У меня есть строка, содержащая 968 двоичных значений 0, 1. Мне нужно преобразовать это в строку, содержащую шестнадцатеричные значения каждой группы байтов из 8 бит. например: '111111111000000110011001' преобразуется в 'ff8199'

Это код C++, который я написал:

#include<iostream>
#include<iomanip>
#include<math.h>
#include<string>
using namespace std;
void con(char* buf)
{
   long int longint=0;
   int len=8;
   for(int i=0;i<len;i++)
      longint+=(buf[len-i-1]-48) * pow(2,i);
   cout<<setbase(16)<<longint;
}
int main()
{
   string buf; cin>>buf; char temp[8]; 
   for(int i=0; i<buf.size(); i+=7)
   { 
     for(int k=i; k<i+8; k++)
       temp[k-i]=buf[k];
     con(temp);
   }  
   return 0;
}

Пожалуйста, скажите мне, что с ним не так, или помогите мне в том, как это сделать.

  • 8
    Это прекрасная возможность научиться использовать отладчик для пошагового выполнения кода и увидеть точное поведение (и неправильное поведение) для себя.
  • 5
    Этот вопрос кажется не по теме, потому что это обычная задача отладки.
Показать ещё 5 комментариев
Теги:
string
hex

2 ответа

1

Во внешнем цикле вы должны увеличить i на 8, а не на 7:

for(int i=0; i<buf.size(); i+=8)

0

Ваша проблема в этой строке:

for(int i=0; i<buf.size(); i+=7)

7 здесь не так. Когда вы прыгаете на 8 шагов одновременно, это будет 8 вместо 7.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню