Hexadecimální číslo na decimální – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Hexadecimální číslo na decimální – C / C++ – Fórum – Programujte.comHexadecimální číslo na decimální – C / C++ – Fórum – Programujte.com

 

pazdy0
Návštěvník
31. 10. 2013   #1
-
0
-

Zdravím mám za úkol udělat program, který převede hexadecimální číslo na decimální. Mám zatím jen tohle a nějak jsem se zasekl a nevím jaký další krok.. Prosím o radu.

#include <iostream>
#include <string>
#include <math.h>

using namespace std;

int main()
{
    string a;
    int b;
    int i;
    cout << "Zadejte hexadecimalni cislo:" << endl;
    cin>>a;
    b=0;
    for (i=0; i<=a.length()-1; i++)
{
    if (a[i]>='0' && a[i]<='9')
    {


    }
}

    return 0;
}
Nahlásit jako SPAM
IP: 2001:718:1001:6a4:3973:1c...–
vitamin+8
Grafoman
31. 10. 2013   #2
-
0
-

#1 pazdy 

Takto:

std::cin >> std::hex >> a;

Alebo načítaj číslo do stringu a potom ho preveď na integer:

std::string str;
std::cin >> str;

int i = std::stoi(str, 0, 16);

Alebo previesť string ručne:

//Napr číslo: AF156
 
  A     F     1     5     6
16^4  16^3  16^2  16^1  16^0

6*(1) + 5*(16) + 1*(16*16) + ('F'-'A'+10)*(16*16*16) + ('A'-'A'+10)*(16*16*16*16) = ...
Nahlásit jako SPAM
IP: 195.28.77.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
pazdy0
Návštěvník
31. 10. 2013   #3
-
0
-

Tak už jsem zase pokročil.. už to počítá dobře.. jen mi to vypisuje všechno čísla včetně konečného.. Jak zabráním, aby to vypsalo jen jedno číslo?...

#include <iostream>
#include <string>
#include <math.h>

using namespace std;

int main()
{
    string a;
    int b;
    int i;
    cout << "Zadejte hexadecimalni cislo:" << endl;
    cin>>a;
    b=0;
    for (i=0; i<=a.length()-1; i++)
{
    if (a[i]>='0' && a[i]<='9')
    {
    b = (b*16) + (a[i]- '0');
    cout<<b<<endl;
    }
    else if(a[i] >= 'A' && a[i]<= 'F')
        {
    b = (b*16) + (a[i] - 'A' + 10);
    cout<<b<<endl;
        }
        else if(a[i] >= 'a' && a[i]<= 'f')
        {
    b = (b*16) + (a[i] - 'a' + 10);
    cout<<b<<endl;
        }
    else
    {
        cout<<"Nespravny vstup."<<endl;
        return 0;
    }

}


    return 0;
}
Nahlásit jako SPAM
IP: 2001:718:1001:6a4:3973:1c...–
ingiraxo+15
Grafoman
31. 10. 2013   #4
-
0
-

Nebo další řešení 

std::string hex = "FF"; // vstup z konzole
unsigned long dec = std::strtoul(hex.c_str(), nullptr, 16);
std::cout << dec; // 255

Jinak doporučuju použít switch místo několikanásobného elseif

Nahlásit jako SPAM
IP: 93.90.162.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
vitamin+8
Grafoman
31. 10. 2013   #5
-
0
-

#3 pazdy
 

    string a;
    //...
    unsigned long vysledok = 0;
    unsigned long rad = 1;  //1, 16, 16^2, 16^3     //v kazdom cykle sa vynasobi 16

    //string musis prechadzat odzadu
    for(int i = a.length()-1; i >= 0; --i, rad *= 16){


        if (a[i]>='0' && a[i]<='9')
        {
            vysledok += rad * (a[i]- '0');
        }

        //...
    }

    cout << "\nvysledok(DEC): " << dec << vysledok;
    cout << "\nvysledok(HEX): " << hex << vysledok;
Nahlásit jako SPAM
IP: 195.28.77.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
vitamin+8
Grafoman
31. 10. 2013   #6
-
0
-

#4 ingiraxo
na switch by sa hodila syntax z D:  

switch(a[i]){
	case '0': .. case '9':
		//...
		break;

	case 'a': .. case 'f':
		//...
		break;

	case 'A': .. case 'F':
		//...
		break;

}
Nahlásit jako SPAM
IP: 195.28.77.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
mikimm
~ Anonymní uživatel
1 příspěvek
11. 11. 2013   #7
-
0
-

TO: Pazdy

Jak jsi to teda vyřešil s tím výpisem všech hexa hodnot? Tj. aby to vypisovalo jen jednu poslední.

Nahlásit jako SPAM
IP: 46.47.148.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 85 hostů

Podobná vlákna

Hexadecimální číslo — založil Divisor

Z decimalni do dvojkove — založil Franceq

Hexadecimální editace — založil Matěj Andrle

Hexadecimální mapa — založil mikeek

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý