У меня есть строка, содержащая 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;
}
Пожалуйста, скажите мне, что с ним не так, или помогите мне в том, как это сделать.
Во внешнем цикле вы должны увеличить i
на 8, а не на 7:
for(int i=0; i<buf.size(); i+=8)
Ваша проблема в этой строке:
for(int i=0; i<buf.size(); i+=7)
7 здесь не так. Когда вы прыгаете на 8 шагов одновременно, это будет 8 вместо 7.