Консультация № 175640
26.12.2009, 22:40
35.00 руб.
0 2 2
Дана текстовая строка, содержащая двоичное число, перевести его в 16-ричную систему счисления и записать во вторую строку

Обсуждение

Неизвестный
26.12.2009, 23:21
общий
это ответ
Здравствуйте, Супрунов С. М..

Предлагаю такой вариант решения.
Функция bits2num(char*) переводит символьную строку (состоящую из 1 и 0) в десятичное число.
Затем при помощи sprintf получаем шестнадцатиричное представление полученного числа в результирующей строке.

Код:

#include <iostream>
#include <cmath>
#include <conio.h>
using namespace std;

int bits2num(char *s)
{
int len=strlen(s);
int num=0;
for(int i=len-1;i>-1;i--)
{
if(s[i]=='1')
num+=pow((double)2,len-i-1);
}
return num;
}

int main()
{
char str1[20],str2[20];
cout<<"Enter str1 : ";
cin>>str1;
sprintf(str2,"%x",bits2num(str1));
cout<<"\nstr2 = "<<str2;
_getch();
}
Неизвестный
27.12.2009, 00:31
общий
это ответ
Здравствуйте, Супрунов С. М..
Программа. C++. Проверял MS VS 2008.
Код:
#include <locale>
#include <iostream>
#include <string>
#include <stdexcept>

using namespace std;

// Ф-я преобразующая двоичную строку в шестнадцатиричную
string bin2hex(string binStr)
{
// Шестнадцатиричные цифры
static const char HEX_DIGITS[]="0123456789ABCDEF";
// Результат
string result;
// Добавим нули к строке слева, чтоб длина стала кратной 4
binStr=string((4-binStr.length()&3)&3,'0')+binStr;
// Итераторы
string::const_iterator it=binStr.begin(),end=binStr.end();
while(it!=end)
{
// Обрабатывать будем 4ки двоичных цифр
unsigned int tmp=0;
size_t count=4;
while(count--)
{
tmp<<=1;
switch(*it)
{
case '0':
break;
case '1':
tmp+=1;
break;
default:
throw invalid_argument("В строке встретился элемент отличный от '0' или '1'");
}
++it;
}
// Прибавим полученную цифру к строке
result+=HEX_DIGITS[tmp];
}
try
{
// Удалим ведущие нули
result=result.substr(result.find_first_not_of('0'));
}
catch(out_of_range&)
{
// Исключение может возникнуть если строка состояла целиком из нулей
result='0';
}
return result;
}

int main()
{
locale::global(locale(""));
string binStr;
// Введем двоичную строку
cout<<"Введите двоичное число:";
cin>>binStr;
try
{
// Преобразуем в шестнадцатиричную
string hexStr=bin2hex(binStr);
cout<<"Шестнадцатиричное число:"<<hexStr<<endl;
}
catch(invalid_argument& ex)
{
cout<<ex.what()<<endl;
}
system("PAUSE");
return 0;
}

Примеры работы:
Код:
Введите двоичное число:0000000000000
Шестнадцатиричное число:0

Введите двоичное число:02020
В строке встретился элемент отличный от '0' или '1'

Введите двоичное число:10100001111110110101010100111010101010111111000
Шестнадцатиричное число:50FDAA9D55F8
Форма ответа