• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zamiana z systemu 2 na 16 c++

VPS Starter Arubacloud
0 głosów
1,236 wizyt
pytanie zadane 18 listopada 2018 w C i C++ przez adamus Użytkownik (860 p.)

Witam jak moge napisac program z zamiany liczby w systemie 2 na 16 ? Do tej pory udalo mi sie tylko zrobic z 16 na 2 i nie wiem jak zabrac sie za odwrotna sytuacje. Tutaj kod z 16 na 2.

#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
	int i,j,pom;
	string x, zbior="0123456789ABCDEF";
	do
	{
		cout<< "Podaj liczbe w systemie 16 ";
		cin>> x;
		for(i=0;i<x.size();i++)
		{
			for(j=0;j<zbior.size();j++)
			{
				if(x[i]==zbior[j])
					{
						pom++;
						break;
					}
			}
		}
	}while(x[i]==zbior[j]);
	for(i=0;i<x.size();i++)
	{
		switch(x[i])
		{
		case '0': 
			cout<< "0000 "; 
			break; 
		case '1': 
			cout<< "0001 "; 
			break; 
		case '2': 
			cout<< "0010 "; 
			break; 
		case '3': 
			cout<< "0011 "; 
			break;
		case '4': 
			cout<< "0100 "; 
			break;
		case '5': 
			cout<< "0101 "; 
			break;
		case '6': 
			cout<< "0110 "; 
			break; 
		case '7': 
			cout<< "0111 "; 
			break; 
		case '8': 
			cout<< "1000 "; 
			break; 
		case '9': 
			cout<< "1001 "; 
			break; 
		case 'A': 
			cout<< "1010 "; 
			break; 
		case 'B': 
			cout<< "1011 "; 
			break; 
		case 'C': 
			cout<< "1110 "; 
			break; 
		case 'D': 
			cout<< "1101 "; 
			break; 
		case 'E': 
			cout<< "1110"; 
			break; 
		case 'F': 
			cout<< "1111 "; 
			break; 
		}
	}
	getch();
	return 0;
}

 

2 odpowiedzi

0 głosów
odpowiedź 18 listopada 2018 przez sefir Dyskutant (8,560 p.)
wybrane 19 listopada 2018 przez adamus
 
Najlepsza
Zamianę na szesnastkowy robisz podobnie. Czytaj kolejne 4 bity i w switchu zamieniaj na wersję szesnastkową. W for zamiast i++ daj i+=4
komentarz 18 listopada 2018 przez adamus Użytkownik (860 p.)
czyli robic takiego samego fora tylko na koncu i+=4 i dalej np case "0000" cout<<'0'

tak ?
komentarz 18 listopada 2018 przez sefir Dyskutant (8,560 p.)
No tak. Tylko musisz się upewnić, że liczba dwójkowa ma ilość cyfr będąca wielokrotnością 4 by się coś nie posypało. Zawsze można dokleić z przodu zera dla brakującego rozmiaru
komentarz 18 listopada 2018 przez sefir Dyskutant (8,560 p.)
No i wiadomo musisz wycinać 4 elementowe zbiory o kolejnych indeksach i
komentarz 18 listopada 2018 przez adamus Użytkownik (860 p.)
No wiem tez o tym myślałem a te zera z przodu to jak dokleic ?
komentarz 18 listopada 2018 przez adamus Użytkownik (860 p.)
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
	int i,j,pom;
	string x, zbior="0123456789ABCDEF";
		cout<< "Podaj liczbe w systemie 2 ";
		cin>> x;
	for(i=0;i<x.size();i+=4)
	{
		switch(x[i])
		{
		case "0000": 
			cout<< '0'; 
			break; 
		case "0001": 
			cout<< '1'; 
			break; 
		case "0010": 
			cout<< '2'; 
			break; 
		case "0011": 
			cout<< '3'; 
			break;
		case "0100": 
			cout<< '4'; 
			break;
		case "0101": 
			cout<< '5'; 
			break;
		case "0110": 
			cout<< '6'; 
			break; 
		case "0111": 
			cout<< '7'; 
			break; 
		case "1000": 
			cout<< '8'; 
			break; 
		case "1001": 
			cout<< '9'; 
			break; 
		case "1010": 
			cout<< 'A'; 
			break; 
		case "1011": 
			cout<< 'B'; 
			break; 
		case "1110": 
			cout<< 'C'; 
			break; 
		case "1101": 
			cout<< 'D'; 
			break; 
		case "1110": 
			cout<< 'E'; 
			break; 
		case "1111": 
			cout<< 'F'; 
			break; 
		}
	}
	getch();
	return 0;
}

 

komentarz 18 listopada 2018 przez adamus Użytkownik (860 p.)
Wyskakuje mi tutaj jeszcze blad przy casech
komentarz 18 listopada 2018 przez sefir Dyskutant (8,560 p.)
Do switch przekaż x.substr(i,4)
komentarz 18 listopada 2018 przez adamus Użytkownik (860 p.)
for(i=0;i<x.size();i+=4)
	{
		switch(x.substr(i,4))

Nadal wyskakuje blad, sory ale nie znam tej funkcji wiec nie wiem co jest zle 

komentarz 18 listopada 2018 przez sefir Dyskutant (8,560 p.)
Aha dobra, dawno nie siedziałem w c++ i widzę, że to nie łyka stringa w switchu. Masz jakieś ograniczenia czego możesz użyć w kodzie? Znasz np tablice?
komentarz 18 listopada 2018 przez adamus Użytkownik (860 p.)
Tak tablice znam :)
komentarz 18 listopada 2018 przez sefir Dyskutant (8,560 p.)
To możesz zrobić tablicę stringów tych co masz w switch czyli "0000","0001"... . A funkcje własne tworzyłeś?
komentarz 18 listopada 2018 przez adamus Użytkownik (860 p.)
tak sam towrzyłem
komentarz 18 listopada 2018 przez adamus Użytkownik (860 p.)
to mozesz opisac jak sie od poczatku za to zabrac bo jakos tego nie widze..
komentarz 18 listopada 2018 przez sefir Dyskutant (8,560 p.)
1 stwórz tablicę liczb dwójkowych

2 w petli for sprawdz ktora liczba dwójkowa jest równa wartości x.substr(i,4), wtedy zwróć index tego elementu z tablicy

3 zwroc wartosc z tablicy zbior o tym indeksie

4 doklej to do stringa wynikowego
komentarz 18 listopada 2018 przez adamus Użytkownik (860 p.)
okej a casemi bym tego nie zrobil?
komentarz 18 listopada 2018 przez sefir Dyskutant (8,560 p.)
Nie, bo w switchu nie możesz sprawdzać stringa, co jest strasznie głupie :P
0 głosów
odpowiedź 18 listopada 2018 przez Maciej Złotorowicz Gaduła (4,230 p.)
Jeżeli chcesz to robić tą metodą to zamianę w drugą stronę można wykonać praktycznie tak samo - wystarczy rozpoznawać po 4 bity z liczby i przypisywać im kolejne cyfry w hexie:
1111 1000
   F      8
Wyizolować 4 znaki ze stringa można tym: http://www.cplusplus.com/reference/string/string/erase/
komentarz 18 listopada 2018 przez adamus Użytkownik (860 p.)
To od czego tak dokładniej zacząc ?
komentarz 19 listopada 2018 przez Maciej Złotorowicz Gaduła (4,230 p.)
możesz np pobierać do bufora 1 4 znaki ze stringa (następnie przy użyciu earse wytnij 4 pierwsze znaki) rozpoznaj swich'em jaka kombinacja jest w buforze i wyświetl odpowiadający jej znak.

Podobne pytania

0 głosów
3 odpowiedzi 345 wizyt
pytanie zadane 29 sierpnia 2017 w Offtop przez Badzonor Obywatel (1,410 p.)
0 głosów
2 odpowiedzi 1,108 wizyt
0 głosów
2 odpowiedzi 907 wizyt
pytanie zadane 30 października 2017 w Egzaminy zawodowe przez Zawisza czarny Obywatel (1,700 p.)

93,018 zapytań

141,988 odpowiedzi

321,281 komentarzy

62,364 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...