Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Pascal: delphi: heksasta nro

sterna [21.03.2010 14:12:52]

#

Delphin vanha versio (6?) antoi vastaukseksi A301 heksasta 41 2D 01:

     j := 4;
     for i := 0 to high(arrProtocol) do begin
         PChar := @L000[j];
         arrProtocol[i].pdTag := Pchar^;
         PSmallInt := @L000[j + 1];
         arrProtocol[i].pdNo := PSmallInt^;
//         PWord := @L000[j + 1];
//         arrProtocol[i].pdNo := PWord^;
         j := j + 3;

Nyt uudella versiolla A tulee ok, nroksi vain eka tavu eli 45 ja satanen (256) puuttuu ('Word' ei muuta tilannetta).

Alunperinkö väärin koodattu?

Mod. lisäsi kooditagit

Teuro [21.03.2010 14:22:15]

#

Eli heksadesimaaliluku "A301" pitäisi muuttaa 10-järjestelmään? Mulla siitä tulee 41729.

EDIT: Poistettu koodi, jossa ei ollut kysymyksen kannalta hyötyä.

Metabolix [21.03.2010 14:30:06]

#

Edit: Pienen ihmettelyn jälkeen keksin, että 301 = $12d. Ilmeisesti tarkoitus on siis muuttaa tavut (41, 2D, 01) siten, että ensimmäinen tulkitaan ASCII-arvona ja kahdesta seuraavasta lasketaan luku. Ensimmäinen onnistuu suoraan tyypinmuunnoksella, ja jälkimmäisessä kannattaa laskea tavu kerrallaan, jottei tavujen merkitsevyysjärjestys (big/little endian) pääse sotkemaan ohjelmaa eri alustoilla.

program muunnos;
var
  taulukko: Array [0..2] of Byte;
  merkki: Char;
  luku: Integer;
begin
  taulukko[0] := $41;
  taulukko[1] := $2d;
  taulukko[2] := $01;

  merkki := Char(taulukko[0]);
  luku := taulukko[1] + $100 * taulukko[2];
  WriteLn(merkki, ', ', luku); {A, 301}
end.

Voisit kyllä pyrkiä kirjoittamaan kysymyksesi selkeämmin, esimerkiksi kuten itse tämän viestin alussa sen muotoilen. Tulkitseminen kesti nimittäin aika kauan.

sterna [21.03.2010 16:26:21]

#

kiitti vastauksista.
Vanha delphi osasi ottaa suoraan kaksi tavua smallinttiin, niinkuin mielestäni sen kuuluukin tehdä. Nyt ihmettelen mitä smallintillä on virkaa jollei se muistista osaa kahta peräkkäistä tavua käsitellä.
(joo, oikaisin kysymystä kun luulin että pikkuintiaanit ja charit olisivat liiankin tuttuja).

Jonne [22.03.2010 10:14:43]

#

http://www.netsoccer2.com/memHexEditor.rar

Tässä olis tämmöinen 'Memory hex editor' ohjelma sorsineen, jos kiinnostaa tutkiskella. :)

edit.
Ohjelman alussa, klikkaa prosessia hiiren oikealla niin voit ladata prosessin.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta