IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

Diskusia – WPF Programátorská kalkulačka - Dokončenie

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Avatar
Michal Žůrek - misaz:18.7.2014 21:31

nechci být rýpavý, ale na můj vkus to řešíš složitě a vytváříš kolo. .NET framewrk umí převádět čísla mezi soustavami...

cokoliv z X do desítkové

System.Convert.ToInt32("1010", 2); // 10 - převe 1010 z 2 soustavy do 10 soustavy

cokoliv z desítkové do X soustavy

System.Convert.ToString(10, 2); // 1010 - převede 10 z desítkové soustavy do dvojkové
:)
 
Odpovedať
18.7.2014 21:31
Avatar
ostrozan
Tvůrce
Avatar
Odpovedá na Michal Žůrek - misaz
ostrozan:18.7.2014 22:33

teď nějak nechápu o čem je řeč?!

v převodu řetězce na příslušný typ používám přesně to co doporučuješ

a ani v převodu čísla na text bych "nevymýšlel kolo", kdybych nechtěl odděleně zobrazovat jednotlivé bajty - FA 21 D2 3A hex a 11111010 00100001 11010010 00111010 bin je prostě přehlednější než FA21D23A a
1111101000100­0011101001000111010 - proto ta složitější konstrukce, ale o tom je zmínka v textu

ale pokud máš lepší nápad, jak to zrealizovat - sem s ním :)

Editované 18.7.2014 22:34
 
Odpovedať
18.7.2014 22:33
Avatar
Petr Laštovička:22.7.2014 9:58

Ve funkci format je chyba. Odstraňuje nuly. Například když je DEC 256, pak zobrazí HEX 01. Správně je 01 00.

 
Odpovedať
22.7.2014 9:58
Avatar
ostrozan
Tvůrce
Avatar
Odpovedá na Petr Laštovička
ostrozan:25.7.2014 7:21

Dík za upozornění - možnosti jsou dvě, buď zrušit podmínku

if (tmp[j] != 0)

pak se budou zobrazovat všechny bajty - 00000000 00000000 00000000 01110001

ale záměr byl , aby se nezobrazovala ta řada zbytečných nul před prvním bajtem s hodnotou > 0

druhá možnost vypadá takto:

internal string format(dynamic val, int soustava)
       {

           int pocetBytu = dateTypeDictionary[Typ];
           byte[] tmp = new byte[pocetBytu];
           string s = null;
           bool nuly = false;  //zmena - pridano
           for (int i = 0; i < tmp.Length; i++) { tmp[i] = (byte)val; val >>= 8; }

           for (int j = tmp.Length - 1; j >= 0; j--)
           {
              if (tmp[j] != 0||nuly==true)//zmena - pridano ||nuly==true
              {
                  nuly = true;  //zmena-pridano
                  if(soustava==2)
                  {
                      s += Convert.ToString(tmp[j], soustava).PadLeft(8, '0');
                      if(j!=0)s+="  ";
                  }
                  else if (soustava == 16)
                  {
                      s += string.Format(string.Format("{0:X}", tmp[j])).PadLeft(2, '0');
                      if (j != 0) s += " ";
                  }
              }
           }

           return s;
       }
   }

kód bude editován v článku

 
Odpovedať
25.7.2014 7:21
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zatiaľ nikto nevložil komentár - buď prvý!