🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.asm
Article #2556

Re: Konwersja dużych liczb

#2556
From: Bogdan (bogdro)
Date: Mon, 09 Sep 2013 16:48
80 lines
4751 bytes
W dniu 08.09.2013 13:38, Kamil pisze:
> Użytkownik "Bogdan (bogdro)" napisał:
> 
>>> GetDlgItemText wczytuje liczby dec z kontrolki zamieniając je na
>>> ASCII.
> 
>> Tak właściwie, to już są w ASCII. Funkcja po prostu umieszcza tekst w
>> buforze, nie konwertuje sama sobie np. cyfry "1" na wartość 31h, bo
>> to, co robi za cyfrę "1", już ma wartość 31h.
> 
> W kontrolce jest 1, a funkcja pobierając znak "w locie" go konwertuje
> i do
> bufora wpisuje już 31. Widziałem to w debuggerze.

 Nie do końca. W kontrolce NA EKRANIE wyświetla się "1". Ale w buforze
kontrolki jest kod ASCII tego znaku, czyli 31h. Pewnie gdybyś
podejrzał pamięć kontrolki, to znalazłbyś tam 31h, aby moim zdaniem
trzymanie wartości w wewnętrznym buforze i konwersja "w locie" na
ekran nie ma wielkiego sensu, bo co np. zrobić z innymi znakami.
 Tak samo, jakbyś sobie na konsoli wyświetlił znak 31h. Nie wyświetli
się "49", tylko "1".


>> Dobrze, to kroki powinny być takie:
> 
>> 1. Oczyszczanie z ASCII: iterujemy po jednym znaku na raz:
>> a) wczytaj kolejny znak z bufora (od przodu)
>> b) odejmij 30h (kod zera w ASCII) lub po prostu '0' czy "0"
>> c) bieżącą liczbę pomnóż przez 10 (mnożenie wielokrotnej precyzji z
>> mojej strony)
>> d) do bieżącej liczby dodaj znak pomniejszony o 30h w punkcie b) - tu
>> nie trzeba dodawania wielokrotnej precyzji
> 
> Jak rozumiem powyższe kroki trzeba wykonać wielokrotnie w pętli? Tyle
> razy
> ile mamy znaków? Ostatniego znaku nie mnożymy, a tylko go dodajemy do
> wyniku?

 Wszystko się zgadza. Przed ostatnim znakiem mnożysz ostatni raz
liczbę przez 10, po czym dodajesz ten ostatni znak.


>> 2. Zamieniać na hex w pamięci już nie musisz.
> 
> Nie muszę ponieważ mnożenie przez 10 jest właśnie konwersją dec na hex.

 Tak. Jest konwersją na postać w pamięci.

>> 3. Mając tak przygotowane dane wejściowe, wykonujesz odpowiednie
>> działanie (dodawanie, odejmowanie itp.).
>> 4. Zamieniać na postać dziesiętną w pamięci nie musisz.
> 
> A to niżej to co to jest jak nie właśnie konwersja hex na dec? :)

 Niezupełnie. To konwersja z hex/dec/oct/bin/cokolwiek na "zrozumiałą
dla człowieka" formę zapisu dziesiętnego :), czyli na napis składający
się ze znaków ASCII. Po tej operacji liczba nie jest w postaci
dziesiętnej, ani żadnej innej logicznej. Jest konwertowana na postać
gotową do wyświetlenia.
 Konwertować na dziesiętny można też w innym sensie, niż to, co tutaj
jest.

>> 5. Konwersja na ASCII: najlepiej też metoda po jednym znaku na raz:
>> a) wyczyść bufor podręczny i wyjściowy
>> b) jeśli liczba jest zerem, to przejdź do g)
>> c) dzielimy liczbę przez 10 (dzielenie wielokrotnej precyzji)
>> d) do RESZTY z dzielenia dodajemy '0' (lub 30h)
>> e) zmienioną resztę z dzielenia zapisujemy w buforze podręcznym
>> f) wracamy do punktu a)
>> g) w buforze wyjściowym zapisz reszty z dzielenia znajdujące się w
>> buforze podręcznym, ale WSPAK (pierwszy bajt ma być ostatnim)
>> h) wyświetl bufor wyjściowy



-- 
Pozdrawiam/Regards - Bogdan                     (GNU/Linux & FreeDOS)
Kurs asemblera x86 (DOS, GNU/Linux):http://rudy.mif.pg.gda.pl/~bogdro
Grupy dyskusyjne o asm:  pl.comp.lang.asm alt.pl.asm alt.pl.asm.win32
www.Xiph.org   www.TorProject.org   Soft(EN): tinyurl.com/bogdro-soft
Technical Details
Message-ID: <522dfbe2$0$1267$65785112@news.neostrada.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.cyf-kr.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!news.glorb.com!npeer02.iad.highwinds-media.com!news.highwinds-media.com!feed-me.highwinds-media.com!nx02.iad01.newshosting.com!newshosting.com!newsfeed.neostrada.pl!unt-exc-01.news.neostrada.pl!unt-spo-a-02.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail
References: <52239cda$0$1225$65785112@news.neostrada.pl> <522a0fcd$0$1459$65785112@news.neostrada.pl> <522a4a2c$0$1268$65785112@news.neostrada.pl> <522b5a7a$0$1263$65785112@news.neostrada.pl> <522c61b4$0$1470$65785112@news.neostrada.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.cyf-kr.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!news.glorb.com!npeer02.iad.highwinds-media.com!news.highwinds-media.com!feed-me.highwinds-media.com!nx02.iad01.newshosting.com!newshosting.com!newsfeed.neostrada.pl!unt-exc-01.news.neostrada.pl!unt-spo-a-02.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail
Date: Mon, 09 Sep 2013 18:48:29 +0200
From: "Bogdan (bogdro)" <bogdan@poczta.gazeta.pl>
User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130801 Thunderbird/17.0.8
MIME-Version: 1.0
Newsgroups: pl.comp.lang.asm
Subject: Re: Konwersja dużych liczb
References: <52239cda$0$1225$65785112@news.neostrada.pl> <522a0fcd$0$1459$65785112@news.neostrada.pl> <522a4a2c$0$1268$65785112@news.neostrada.pl> <522b5a7a$0$1263$65785112@news.neostrada.pl> <522c61b4$0$1470$65785112@news.neostrada.pl>
In-Reply-To: <522c61b4$0$1470$65785112@news.neostrada.pl>
Lines: 80
Message-ID: <522dfbe2$0$1267$65785112@news.neostrada.pl>
Organization: Telekomunikacja Polska
NNTP-Posting-Host: rudy.mif.pg.gda.pl
X-Trace: 1378745316 unt-rea-a-02.news.neostrada.pl 1267 153.19.42.16:55293
X-Complaints-To: abuse@news.neostrada.pl
X-Received-Bytes: 4410
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit