reklama
Aktuality  |  Články  |  Recenze
Doporučení  |  Diskuze
Grafické karty a hry  |  Procesory
Storage a RAM
Monitory  |  Ostatní
Akumulátory, EV
Robotika, AI
Průzkum vesmíru
Digimanie  |  TV Freak  |  Svět mobilně

c# Prevod ze 16 soustavy do 10

mache (1)|19.1.2009 16:27
Dobrý den nemohli byste mi pomoci s napsaním programu v c# ktery po zadni cisla v 16 soustave prevede cislo do 10 soustavy? dekuji
Drobcek9056 (115)|19.1.2009 17:00
pokial pouzivas Microsoft Visual C#, tak ma online HELP, zadaj si tam spojenie : HexNumber enumeration member a mas tam aj priklad ako to urobit, a aj pouzite prikazy aj kniznice

EDIT: a ak je to pre teba tazke, tak tu mas par konkretnych prikladov :
http://www.geekpedia.com/KB8_How-do-I-convert-from-decimal-to-hex-and-hex-to-decimal.html
a vsetko je na googli :D http://www.google.sk/search?hl=sk&q=C%23+hex+to+dec&btnG=H%C4%BEada%C5%A5+v+Google&meta=&aq=f&oq=
EditorPO (2819)|19.1.2009 17:20
Aspon algoritmus (od synatora ;))

[CODE]print("cislo v16-kovej sustave %02X je v desiatkovej sustave: %d", cislo, cislo); [/CODE]
Drobcek9056 (115)|19.1.2009 17:23
[QUOTE=EditorPO;208677]Aspon algoritmus (od synatora ;))

[CODE]print("cislo v16-kovej sustave %02X je v desiatkovej sustave: %d", cislo, cislo); [/CODE][/QUOTE]

nic v zlom,ale synator sa uci asi C++, a mache potrebuje C#. Aj ked, algoritmus, "mozno" vyuzije, len v C# je uz iny kontext.

EDIT : tak tu je kod, aj s prelozenym popisom :

int decValue = 182; // zadavanie cisla (inicializovanie) v desiatkovej sustave
string hexValue = decValue.ToString("X"); // konvertovanie cisla do HEXa sustavy (string = znaky, kedze HEXa vyuziva aj A,B,C,D,E)
int decAgain = int.Parse(hexValue, System.Globalization.NumberStyles.HexNumber); // konvertovanie HEXa tvaru naspat do ciselneho (ale uz HEXa hodnota nie desiatkova)

Este by bolo dobre keby si uviedol ci to chces ako konzolovu, alebo formularovu aplikaciu :) a ci chces aj obmedzenie napr. do 128, alebo nieco viac k tvojmu programu. V tych linkoch je uvedene (v pokeci k tomuto zdojaku) aj zdrojak pre C++
EditorPO (2819)|19.1.2009 17:30
[quote=Drobcek9056;208679]ale synator sa uci asi C++[/quote]
no vidis, ja mu to spocitam, ze nerozozna C# od C++
grafnev (69)|26.1.2009 11:50
Hmm a co neco zalozeneho na faktu ze:
123ABC je v desitkove soustave 12*16^0 + 11*16^1 + 10*16^2 + 3*16^3 + 2*16^4 + 1*16^5 =1 194 684 coz tedy je 4*10^0 + 8*10^2 + 6*10^3 + 4*10^4 ... atd.
Drobcek9056 (115)|26.1.2009 14:20
[QUOTE=grafnev;211388]Hmm a co neco zalozeneho na faktu ze:
123ABC je v desitkove soustave 12*16^0 + 11*16^1 + 10*16^2 + 3*16^3 + 2*16^4 + 1*16^5 =1 194 684 coz tedy je 4*10^0 + 8*10^2 + 6*10^3 + 4*10^4 ... atd.[/QUOTE]

neuvazujes zle,len by som ta chcel vidiet ako to urobis v programe a aky bude dlhy zdrojak pouzitim tento metody :)
grafnev (69)|2.2.2009 16:57
[QUOTE=Drobcek9056;211452]neuvazujes zle,len by som ta chcel vidiet ako to urobis v programe a aky bude dlhy zdrojak pouzitim tento metody :)[/QUOTE]

No me spise slo o to, zda to nema mit take nejaky vzdelavaci ucel :). Pokud je to ciste prakticka zalezitost tak je mnou navrhovany postup samozrejme zbytecny.
Dojigiri (1629)|3.2.2009 14:23
[QUOTE=Drobcek9056;211452]neuvazujes zle,len by som ta chcel vidiet ako to urobis v programe a aky bude dlhy zdrojak pouzitim tento metody :)[/QUOTE]

Hmm v programu poměrně snadno, vezmu písmeno, odečtu od jeho kódu kód znaku '0' (nula), pokud bude větší než 9 tak je to nejspíš písmeno, tak odečtu A, pokud nebude mezi 0 a 5 tak chyba (jinej znak), pokud jo tak přičtu 10. A mám znak převedenej na DEC číslici. (možno udělat i jinak, např. rovnou převodní tabulkou)
A začnu od první číslice zleva. Hodnotu kterou získám, pokud nejsem na konci, vynásobím 16 (resp. nejlíp posunu bitově o 4 bity doleva) a připočítám další hodnotu, dokud nedojdu do konce, a mám číslo dekadicky.

Tomu se říká algoritmus. Samozřejmě málokdo něco takovýho programuje tak, že bude brát všechny varianty a násobit to podle toho, na jaký je to pozici x 16^5 apod. (ale i tak to lze udělat, jít zprava a pamatovat si, na kolikátý pozici zprava jsem ...).

Pokud už je na to v nějaký knihovně funkce, tak je samozřejmě snadnější zavolat tu funkci, to je jasný, ale ono to v ní bude udělaný nějak podobně a je celkem prima mít představu, jak to prostě spočítat.
Drobcek9056 (115)|3.2.2009 17:33
[QUOTE=Dojigiri;214547]Hmm v programu poměrně snadno, vezmu písmeno, odečtu od jeho kódu kód znaku '0' (nula), pokud bude větší než 9 tak je to nejspíš písmeno, tak odečtu A, pokud nebude mezi 0 a 5 tak chyba (jinej znak), pokud jo tak přičtu 10. A mám znak převedenej na DEC číslici. (možno udělat i jinak, např. rovnou převodní tabulkou)
A začnu od první číslice zleva. Hodnotu kterou získám, pokud nejsem na konci, vynásobím 16 (resp. nejlíp posunu bitově o 4 bity doleva) a připočítám další hodnotu, dokud nedojdu do konce, a mám číslo dekadicky.

Tomu se říká algoritmus. Samozřejmě málokdo něco takovýho programuje tak, že bude brát všechny varianty a násobit to podle toho, na jaký je to pozici x 16^5 apod. (ale i tak to lze udělat, jít zprava a pamatovat si, na kolikátý pozici zprava jsem ...).

Pokud už je na to v nějaký knihovně funkce, tak je samozřejmě snadnější zavolat tu funkci, to je jasný, ale ono to v ní bude udělaný nějak podobně a je celkem prima mít představu, jak to prostě spočítat.[/QUOTE]

no ja niesom proti tvojmu algoritmu,nepovedal som ze je zly,len naco robit nieco,co je uz vytvorene a je na to priamo kniznica,ktoru pouziva C# :) staci len pohladat na nete, ako som uz uviedol linky a riesenie sa najde a je jednoduchsie ako vytvarat algoritmy,kedze C# obsahuje priamo prevod zo 16 do 10tkovej ale aj inych sustav
Dojigiri (1629)|4.2.2009 10:37
Jasný, no, pokud to lze použít z knihovny a znám tu funkci (nebo najdu přes help nebo google) tak je to samozřejmě nejsnadnější. To bylo jen, že takovej algoritmus neni až tak složitej, a někoho (třeba mě) baví takový věci vymejšlet :D :D

(btw. mám udělanou funkci, která umožňuje zadat pro konverzi libovolnej radix - pro C++, kde většina funkcí umí radix max. 16, já tuhle potřeboval číslo s nějakým vyšším základem, asi 32 nebo kolik už nevim přesně k čemu jsem to použil :) - je to teda omezený abecedou, což je nějakých 36 - a neni to tak těžký udělat, algoritmus je stejnej jako jsem zmiňoval, akorát číslo, kterým se násobí, neni 16 ale požadovanej radix :))