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

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

 

Divisor0
Duch
5. 11. 2013   #1
-
0
-

Dobrý den potřeboval bych poradit....mám realizovat program, který převede hexadecimální číslo na decimální....a nemůžu přijít na to,proč mi to špatně počítá......

#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 = ((a[i]+48)*pow(16.0f, a[i]) + (a[i]- '0'));

    }
else if(a[i] >= 'A' && a[i]<= 'F')
    {
        b = (a[i]+55)*pow(16.0f, a[i]) + (a[i] - 'A' + 10);

    }
else if(a[i] >= 'a' && a[i]<= 'f')
    {
        b = (a[i]+87)*pow(16.0f, a[i]) + (a[i] - 'A' + 10);


    }
    else
    {
        cout<<"Nespravny vstup."<<endl;
        return 0;
    }
    cout<<b<<endl;

}


    return 0;
}
Nahlásit jako SPAM
IP: 2001:718:1001:6a4:595:6a5...–
5. 11. 2013   #2
-
0
-

Pokud chceš z '5' získat číslo, musíš 0x30 odečíst. Pokud jsem se dobře díval, přičítáš. Podobně u 'a' také odečítat

hu

Nahlásit jako SPAM
IP: 195.178.67.–
5. 11. 2013   #3
-
0
-

asi by bylo rychlejší vzít první hex cifru zleva, vynásobit ji šestnácti, přičíst druhou cifru, součet vynásobit šestnácti.... a nakonec přičíst poslední cifru. Pro násobení šestnácti lze použít bitový posun vlevo.

A úplně nejjednodušší je použít něco hotového, třeba sscanf

hu

Nahlásit jako SPAM
IP: 195.178.67.–
Divisor0
Duch
5. 11. 2013   #4
-
0
-

Prosím tě nemohl bys mi to trošku napsat do toho zdrojáku? Jsem začátečník a vůbec netuším co mě teď píšeš.

Nahlásit jako SPAM
IP: 2001:718:1001:6a4:595:6a5...–
5. 11. 2013   #5
-
0
-

   

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

using namespace std;

//---------------------------------------------------------------------------

#pragma argsused
int _tmain(int argc, _TCHAR* argv[])
{
	string vstup;
	int vysl, i;

	cout<<"zadej hex cislo"<<endl;
	cin>>vstup;
	vysl = 0;

	for (i = 0; i < vstup.length(); i++) {
	   vysl = vysl * 16;
	   if ( (vstup[i] >= '0') && (vstup[i] <= '9') ) {   //cifra je z rozsahu 0 az 9
		 vysl += vstup[i] - '0';                         //odecte 0x30, ziska cislo ze znaku
	   }
	   else
		 if ( (vstup[i] >= 'a') && (vstup[i] <= 'f') ) {  //cifra je z rozsahu a az f
		   vysl += vstup[i] - 'a' + 10;                   //ze znaku ziska cislo 0 az 15
		 }
		 else
		   if ( (vstup[i] >= 'A') && (vstup[i] <= 'F') ) {  //cifra je z rozsahu a az f
		   vysl += vstup[i] - 'A' + 10;                   //ze znaku ziska cislo 0 az 15
		 }
		 else
		 {
			 cout<<"chybne zadani"<<endl;
			 break;
         }
	}
    cout<<"vysledek  "<<vysl<<endl;
	return 0;
}

Takhle by to mohlo být. Vyzkoušeno, použité IDE C++ Builder 2010

hu

Nahlásit jako SPAM
IP: 195.178.67.–
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, 90 hostů

Podobná vlákna

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ý