NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Převod z hexadecimální soustavy do binární a opačně

V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Preedy
Člen
Avatar
Preedy:14.6.2012 16:51

Ahoj, chci si udělat program na převod mezi těmahle dvouma soustavama. Převáděcí metodu znám, ale nevím jak ošětřit, aby se mohla zadávat jenom příslušné hodnoty(kód).

har[] hexa = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
           char[] bin= { '0', '1'};

. A ještě nevím jak nastavit, že maximum může být FFFFFFFF nebo 11111111.Díky moc

 
Odpovědět
14.6.2012 16:51
Avatar
matesax
Tvůrce
Avatar
matesax:14.6.2012 16:54

Koukni se na můj program - převod mezi všemi soustavami:
http://www.itnetwork.cz/index.php?…

 
Nahoru Odpovědět
14.6.2012 16:54
Avatar
Preedy
Člen
Avatar
Preedy:14.6.2012 16:56

díky :), nevšiml jsem si :(

 
Nahoru Odpovědět
14.6.2012 16:56
Avatar
David Jančík
Vlastník
Avatar
Odpovídá na Preedy
David Jančík:14.6.2012 16:59

Můžeš použít fce C#.
Převede číslo z 16kové na dekadickou.

Convert.ToInt32(hexvalue, 16);

A pak jej převedeš na binární:

Convert.ToString(Convert.ToInt32(hexvalue, 16), 2);

Maximum nastav obdobně. Převedeš si číslo na dekadické a zjistíš jeho velikost, poté jen podmínka.

Můžeš se také inspirovat programem od matesaxe: http://www.itnetwork.cz/index.php?…

Nahoru Odpovědět
14.6.2012 16:59
Zapomeň, že je to nemožné a udělej to ;)
Avatar
matesax
Tvůrce
Avatar
Odpovídá na David Jančík
matesax:14.6.2012 17:00

Co by pak z toho měl, kdyby si to neudělal sám? :)

 
Nahoru Odpovědět
14.6.2012 17:00
Avatar
Preedy
Člen
Avatar
Preedy:14.6.2012 17:15

Na jiný program koukat nechci, zatím. Ale jak to oštřit, to totiž ta metoda vyhodí vyjímku.

 
Nahoru Odpovědět
14.6.2012 17:15
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Preedy
matesax:14.6.2012 17:21

Dáš to do try bloku - který pak musí obsahovat buď cath, nebo finally, nebo obojí

 try
{
\\kód podezdřelý z vyvolání vyjímky
}
catch
{
\\ kód který se provede, když kód hoře selže
}
 
Nahoru Odpovědět
14.6.2012 17:21
Avatar
matesax
Tvůrce
Avatar
Odpovídá na matesax
matesax:14.6.2012 17:24

Pokud chceš vyvolat hlášku dej do catch Exception:

 catch (Exception e)
MessageBox.Show(e.Message, "Error - Chyba");

Tím vyvoláš hlášku o zprávě,...

 
Nahoru Odpovědět
14.6.2012 17:24
Avatar
matesax
Tvůrce
Avatar
Odpovídá na matesax
matesax:14.6.2012 17:25

Pardon:

 catch (Exception e)
{
MessageBox.Show(e.Message, "Error - Chyba");
}
 
Nahoru Odpovědět
14.6.2012 17:25
Avatar
matesax
Tvůrce
Avatar
Odpovídá na matesax
matesax:14.6.2012 17:28

A kdyby jsis chtěl hlášku zkopírovat, tak to dej do stringu - e.ToString() v tomto případě a string pak vlož někam, odkud můžeš kopírovat - TextBox,...

 
Nahoru Odpovědět
14.6.2012 17:28
Avatar
matesax
Tvůrce
Avatar
Odpovídá na matesax
matesax:14.6.2012 17:30

mardon není to e.ToString() ale e.Message - to je string,...

 
Nahoru Odpovědět
14.6.2012 17:30
Avatar
Preedy
Člen
Avatar
Preedy:14.6.2012 17:38

jo jo už vím, výjimky vidim poprvý, ale mám to tam. Jenom ale nevím jak do try hodit že nehci mít číslo větší než FFFFFFFF nebo 11111111

 
Nahoru Odpovědět
14.6.2012 17:38
Avatar
Preedy
Člen
Avatar
Preedy:14.6.2012 17:41

nějak Cislo10 !>= 4294967295 - tajhle nějak to myslim, ale vim že tehle zápis nefunguje

 
Nahoru Odpovědět
14.6.2012 17:41
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Preedy
David Hartinger:14.6.2012 18:09

Negace >= obvykle bývá <.

Nahoru Odpovědět
14.6.2012 18:09
New kid back on the block with a R.I.P
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Preedy
matesax:14.6.2012 18:22

No jak máš udělán vstup uživatele? TextBoxem? Musíš vzít prvek pro vstup uživatele a jeho obsah převést do čísla - třeba pokud máš vstup zachycen do textboxu se jménem tb:

int g;
if(int.TryParse(tb.Text, g))
//povedlo se - g obsahuje int z textu
else
//nepovedlo se - nyní musíš ošetřit písmena, která nahrazují číslice,...

no a pak bude podmínka:

if(g < 10000)
 
Nahoru Odpovědět
14.6.2012 18:22
Avatar
Preedy
Člen
Avatar
Preedy:14.6.2012 18:40

ano, bude to textbox, ale ted to dělám v konzoli

 
Nahoru Odpovědět
14.6.2012 18:40
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Preedy
matesax:14.6.2012 19:00

Aha. No tak to snad již umíš - místo vstupu z textboxu tam bude vstup z konzole,...

 
Nahoru Odpovědět
14.6.2012 19:00
Avatar
Preedy
Člen
Avatar
Preedy:14.6.2012 19:06

ano, vím, ale mám problém s tou vyjímkou funguje to takhle

int dekaCislo;
           string hexaCislo;
           string binCislo;
           Console.Write("Zadej číslo v hexa soustavě: ");
           hexaCislo = Console.ReadLine();

           try
           {
               binCislo = Convert.ToString(Convert.ToInt32(hexaCislo, 16), 2);
               dekaCislo = Convert.ToInt32(hexaCislo, 16);
               if (!(dekaCislo < 256))
               {
                   Console.WriteLine("chyba");
               }
               else
               {
                   Console.WriteLine(binCislo);
               }
           }
           catch (Exception e)
           {
               Console.WriteLine("Chyba");
           }

a když

Console.WriteLine(binCislo);

vložim až za catch, tak to překladač nepřeloží.

 
Nahoru Odpovědět
14.6.2012 19:06
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Preedy
matesax:14.6.2012 19:30

První věc - použij to tryParse

 float vysledek = 0;

if (float.TryParse(Console.ReadLine(), vysledek) && vysledek.Length < 10000)
Console.WriteLine("Výsledek je : " + Convert.ToString(Convert.ToInt32(vysledek, 16), 2));
else
Console.WriteLine("Chyba");
 
Nahoru Odpovědět
14.6.2012 19:30
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Preedy
matesax:14.6.2012 19:36

Pokud nechceš hlášku o chybě, či cokoliv jiného z Exception, tak ji nemusíš dávat - naopak je to nežádoucí - v takovém případě použij jenom catch,...

 
Nahoru Odpovědět
14.6.2012 19:36
Avatar
matesax
Tvůrce
Avatar
matesax:14.6.2012 19:56

Nejsem si jistý posloupností kódu, tak dej vědět, jak jsi dopadl,...

 
Nahoru Odpovědět
14.6.2012 19:56
Avatar
Preedy
Člen
Avatar
Preedy:14.6.2012 20:03

no, není mi jasný

float = 0;//proč nula?
 
Nahoru Odpovědět
14.6.2012 20:03
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Preedy
matesax:14.6.2012 20:25

Jen jsem si nebyl jistý, jestli to nebude vadit podmínce - když nechám prázdný konstruktor - ale nemělo by - takže tam dej jenom

float vysledek;

Jinak na tom čísle nezáleží - floatTryParse jej přepisuje. Jedná se o inizćializaci - ne všude můžeš mít prázdný konstruktor - nekdy mu musíš přiřadit hodnotu - ikdyž defaultní nějaká je vždy,...

 
Nahoru Odpovědět
14.6.2012 20:25
Avatar
matesax
Tvůrce
Avatar
Odpovídá na matesax
matesax:14.6.2012 20:26

inicializaci

funguje ti to?

 
Nahoru Odpovědět
14.6.2012 20:26
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Preedy
matesax:14.6.2012 20:30

Jinak jak jsis všiml, vyvaruj se zbytečným mezi krokům - jinak ti zbytečně kyne kód. :)

 
Nahoru Odpovědět
14.6.2012 20:30
Avatar
Preedy
Člen
Avatar
Preedy:14.6.2012 20:52

no, nefunguje, ale nakonec to mám přes try

 
Nahoru Odpovědět
14.6.2012 20:52
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Preedy
matesax:14.6.2012 20:57

Jak nefunguje? Přes try je to zbytečné,...

 
Nahoru Odpovědět
14.6.2012 20:57
Avatar
Preedy
Člen
Avatar
Preedy:14.6.2012 21:16

nevím, ale mám ho tam správně určitě a s tím try, nevím, zatim mě to neklame

 
Nahoru Odpovědět
14.6.2012 21:16
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Preedy
matesax:14.6.2012 21:24

Jenom říkám, že try blok je na tohle zbytečný,...

 
Nahoru Odpovědět
14.6.2012 21:24
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 29 zpráv z 29.