IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze – WPF Programátorská kalkulačka - Dokončení

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
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é
:)
 
Odpovědět
18.7.2014 21:31
Avatar
ostrozan
Tvůrce
Avatar
Odpovídá 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 :)

Editováno 18.7.2014 22:34
 
Odpovědět
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.

 
Odpovědět
22.7.2014 9:58
Avatar
ostrozan
Tvůrce
Avatar
Odpovídá 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

 
Odpovědět
25.7.2014 7:21
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 4 zpráv z 4.