Převod šestnáctkové soustavy na desítkovou – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Převod šestnáctkové soustavy na desítkovou – C / C++ – Fórum – Programujte.comPřevod šestnáctkové soustavy na desítkovou – C / C++ – Fórum – Programujte.com

 

Lorin
~ Anonymní uživatel
69 příspěvků
1. 7. 2012   #1
-
0
-

Ahoj, mám následující kód pro převod z šestnáctkové do desítkové soustavy:

#include <iostream>
#include <sstream>
#include <string>
#include <SDL/SDL.h> // kvůli Uint32

Uint32 hexToDec(std::string hex) {
    std::istringstream iss(hex);
    Uint32 decimal;
    iss >> std::hex >> decimal;
    return decimal;
}

void htmlColor(std::string htmlColorString) {
    std::string temp = htmlColorString;
    if (temp.length() > 7) {
        std::cout << "Error" << std::endl;
    }
    
    // 
    if (temp.at(0) != '#') {
        std::cout << "Error" << std::endl;
    } else {
        temp = temp.substr(1, temp.length());
    }

    std::cout << temp.substr(0, 2) << " " << hexToDec(temp.substr(0, 2)) << std::endl;
    std::cout << temp.substr(2, 2) << " " << hexToDec(temp.substr(2, 3)) << std::endl;
    std::cout << temp.substr(4, 2) << " " << hexToDec(temp.substr(4, 5)) << std::endl;
}

int main(int argc, char **argv) {
    htmlColor("#00FFDD");
}

Po zkompilování a spuštění dostávám následující výsledky:

# ./hexToDec.run
00 0
FF 4093
DD 221

První a poslední hodnota (00 = 0, DD = 221) jsou správné, ale hodnota pro FF by měla být 255. Může mi někdo objasnit, kde je problém?

Nahlásit jako SPAM
IP: 89.190.72.–
Martin Kozibrátka0
Stálý člen
1. 7. 2012   #2
-
+1
-
Zajímavé

Zkus si ty hodnoty 

std::cout << temp.substr(0, 2) << " " << hexToDec(temp.substr(0, 2)) << std::endl;
std::cout << temp.substr(2, 2) << " " << hexToDec(temp.substr(2, 3)) << std::endl;
std::cout << temp.substr(4, 2) << " " << hexToDec(temp.substr(4, 5)) << std::endl;

vypsat a hned zjistíš kde je chyba

Nahlásit jako SPAM
IP: 88.83.169.–
Savana.cz - neomezený webhosting za pár kaček :)
Lorin0
Návštěvník
1. 7. 2012   #3
-
0
-

Problém už jsem našel. Chvíli jsem čachroval s temp.substr(), který vypisuje hexadecimální hodnotu. Pak jsem jen zapomněl změnit hodnoty pro parametr funkce hexToDec()... 

Díky za snahu.

Nahlásit jako SPAM
IP: 89.190.72.–
vitamin+8
Grafoman
1. 7. 2012   #4
-
0
-

#1 Lorin
miesto nestandartneho <SDL/SDL.h> a Uint32 mozes pouzit:

<stdint.h> a u_int32_t

Nahlásit jako SPAM
IP: 95.105.157.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
Lorin0
Návštěvník
1. 7. 2012   #5
-
0
-

#4 vitamin
Uint32 používám právě z toho důvodu, že na všech OS, na které je SDL portováno, bude mít Uint stejnou velikost. 

Co se týče u_int32_t, jaký je rozdíl mezi ním a uint32_t? Není to tak, že u_int32_t je definováno v nějakém linuxovém hlavičkovém souboru (tuším sys/types.h) a uint32_t je v <stdint.h>? Pak by byl u_int32_t nepoužitelný na jiných platformách (Windows, Mac), čemuž bych se chtěl vyhnout.

Nahlásit jako SPAM
IP: 89.190.72.–
vitamin+8
Grafoman
1. 7. 2012   #6
-
0
-

Ma tam byt uint32_t, moja chyba. 

Je definovany v http://cplusplus.com/reference/clibrary/cstdint/   co je cast standartu c++, takze by to malo fungovat aj na wine, macu atd..

Nahlásit jako SPAM
IP: 95.105.157.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
Lorin0
Návštěvník
2. 7. 2012   #7
-
0
-

JJ, díky. Kouknu na to.

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

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ý