Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Suma kontrolna xor2 obliczanie.

Piotr520 15 Lut 2016 15:15 1278 12
  • #1 15 Lut 2016 15:15
    Piotr520
    Poziom 22  

    Witam wszystkich.
    Mam takie pytanie,jak obliczyć sumę kontrolną na podstawie dodanego pliku?Da się to zrobić w prosty sposób?Bo ja programistą nie jestem i nie wiem o co w tym chodzi.Dodaję plik dla którego suma jest liczona.Suma pliku to C72B
    Dodaję jeszcze przetłumaczony opis liczenia.Pomoże ktoś?

    0 12
  • Pomocny post
    #2 15 Mar 2016 23:00
    jestam
    Specjalista Automatyk

    Wg opisu: "Suma kontrolna jest obliczana jako XOR 2 bajtowych wartości od 0000 do adr"

    To nie jest żadne XOR2 jak w temacie. Chodzi o XOR wartości stałej 7F7F i dwubajtowych wartości o adresach od 0 do 0x5E, z wynikiem zapisanym w 0x60.

    7F7F ^ 02C8 ^ FD37 ^ 006E ^ ....^ 2991 = C72B (a przynajmniej powinien, bo żeby sprawdzić musiałbym te dane przepisać z obrazka)

    Pierwszą kolumnę (0000 do 0060) należy zignorować - to adres a nie dane.

    Edit: jak kolega vonar poniżej zauważył, jest tam jeszcze stała 7F7F. Poprawiłem wzór w poście.

    0
  • #3 16 Mar 2016 20:36
    Piotr520
    Poziom 22  

    Może źle się wyraziłem.Rozumiem że odpowiednie działanie na tych bajtach daje wynik 7F7F tylko czemu nie ma tego w pliku?
    Dodaję cały plik.

    0
  • Pomocny post
    #4 16 Mar 2016 20:49
    vonar
    Poziom 28  

    Niezupełnie. Pod adresem 0x60 ma być zapisana taka wartość, by XOR dwubajtowych słów 0x00 - 0x5F i tej wartości dawał 0x7F7F.

    Tak w ogóle to mógłbyś do tego wyniku z automatycznego translatora załączyć też rosyjski oryginał, na pewno znalazłby się ktoś, kto mógłby wyjaśnić wątpliwości. ;)

    0
  • Pomocny post
    #5 16 Mar 2016 20:57
    jestam
    Specjalista Automatyk

    @Piotr520: mógłbyś te dane wstawić w postaci tekstu a nie obrazka?

    0
  • Pomocny post
    #7 16 Mar 2016 21:48
    vonar
    Poziom 28  

    No i zgadza się.

    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    Wynik c72b.

    0
  • #8 16 Mar 2016 22:20
    Piotr520
    Poziom 22  

    vonar napisał:
    No i zgadza się.
    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    Wynik c72b.


    Jakbyś mógł jeszcze wytłumaczyć łopatologicznie jak to jest liczone to byłbym wdzięczny :D .Jest na to jakiś przelicznik czy wzór?Te wartości czyli bajty tłumaczymy na dec i wykonujemy działanie czy coś w tym rodzaju?

    0
  • Pomocny post
    #9 16 Mar 2016 22:30
    jestam
    Specjalista Automatyk

    1. W zmiennej pomocniczej masz wartość 0x7F7F (dziesiętnie 32639).
    2. Bierzesz pierwsze dwa bajty jako liczbę 16 bitową:
    (bajt o adresie 0) * 256 + (bajt o adresie 1) czyli 0x02 * 256 + 0xC8 = 0x02C8 (dziesiętnie 2 * 256 + 200 = 712).
    3. Obliczasz XOR wartości zmiennej pomocniczej i dwóch pierwszych bajtów w pamięci:
    0x7F7F XOR 0x02C8 = 0x7DB7 (dziesiętnie 32639 XOR 712 = 32183). To jest nowa wartość zmiennej pomocniczej.
    4. Bierzesz kolejne 2 bajty i obliczasz nową wartość zmiennej pomocniczej, powtarzasz 48 razy, wynik końcowy zapisujesz w komórkach o adresie 0x60 i 0x61.

    Można to też liczyć na bajtach zamiast na słowach 16 bitowych, osobno bajty o adresach parzystych i nieparzystych.

    0
  • #10 16 Mar 2016 22:37
    Piotr520
    Poziom 22  

    Dziękuję za pomoc panowie.Jeszcze jedno pytanie,są do tego jakieś programy które same to wyliczą?

    0
  • #11 16 Mar 2016 23:08
    jestam
    Specjalista Automatyk

    Kol. @vonar napisał taki program i wkleił go w poście wyżej. Zmień sobie dane wg potrzeb, skompiluj i uruchom, wyświetli właściwą sumę kontrolną.

    Jak nie masz kompilatora C++, to poniżej wersja w C#

    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    Zapisz jako plik program.cs
    Uruchom linię poleceń, skompiluj
    Kod: dos
    Zaloguj się, aby zobaczyć kod


    Uruchom program.exe, wyświetli sumę kontrolną.

    0
  • Pomocny post
    #12 17 Mar 2016 00:35
    373522
    Użytkownik usunął konto  
  • #13 20 Mar 2016 11:27
    Piotr520
    Poziom 22  

    Witam.
    Trochę to skomplikowane zwłaszcza że z programowaniem nie mam nic wspólnego.Zainstalowałem kiedyś Codeblocks i obejrzałem filmiki niejakiego Mirosława Zelenta na youtube.Bez podstaw marnie to idzie.
    Dziękuję za pomoc panowie.

    0