logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Obliczanie sumy kontrolnej checksum dla wartości 010203 w Visual Basic jak w Bascom

zibi11 10 Sty 2007 18:27 1686 5
REKLAMA
  • #1 3430285
    zibi11
    Poziom 19  
    Posty: 539
    Pomógł: 1
    Ocena: 30
    suma kontrolna z wysłanej wartości 010203
    w bascomie checksum(010203) = 113
    jak to jest liczone

    i jak to zrobić w visualu basicu tam nie ma checksum

    chce porównać te dwie wielkości w culu poprawności transmisji

    Pozdrawiam
  • REKLAMA
  • #2 3430690
    GienekS
    Poziom 32  
    Posty: 1971
    Pomógł: 139
    Ocena: 15
    Dla wyjaśnienia musisz podać w jakim systemie liczbowym są zapisane te liczby.
  • REKLAMA
  • #3 3430824
    shg
    Poziom 35  
    Posty: 2289
    Pomógł: 339
    Ocena: 135
    pewnie to jest CRC8 (8 od ośmiu bitów) i tego należy szukać.
    nie wiem tylko jak bascom traktuuje takei większe liczby i czy to czasem nie operuje na stringach, czy tablicach.
    W kadym razie jak znajdziesz już algorytm, to potrzebne są jeszcze początkowe wartości, jest kilka standardowych.
  • REKLAMA
  • #4 3430864
    zibi11
    Poziom 19  
    Posty: 539
    Pomógł: 1
    Ocena: 30
    010203 to string danych
  • REKLAMA
  • #5 3431424
    tmgofer
    Poziom 12  
    Posty: 84
    Pomógł: 1
    Ocena: 1
    zibi11 napisał:
    010203 to string danych

    Jeśli to string, to CRC liczysz w następujący sposób:
    -Sumujesz kody ASCII tych znaków. Suma powinna być zadeklarowana jako unsigned char, żeby była brana bez znaku i działała modulo 256.
    -sumę zmieniasz na liczbę ujemną (a w kodzie uzupełnien do 2: negacja bitowa, zwiększenie o 1)
    no i gotowe :)

    skleciłem prosty kodzik na poczekaniu, może zadziała :D

    unsigned char liczLRC(char ramka[],dlugosc)
    {
      unsigned char suma=0;
      char i;
      unsigned char lrc;
    
      for (i=1;i<=dlugosc;i++)
          suma+=ramka[i];
      
      lrc=~suma+1;
      return lrc;  
    }


    Pozdrawiam!
  • #6 3432421
    Tdv
    Poziom 34  
    Posty: 2237
    Pomógł: 150
    Ocena: 53
    tmgofer napisał:
    zibi11 napisał:
    010203 to string danych

    Jeśli to string, to CRC liczysz w następujący sposób:
    -Sumujesz kody ASCII tych znaków. Suma powinna być zadeklarowana jako unsigned char, żeby była brana bez znaku i działała modulo 256.
    -sumę zmieniasz na liczbę ujemną (a w kodzie uzupełnien do 2: negacja bitowa, zwiększenie o 1)
    no i gotowe :)

    skleciłem prosty kodzik na poczekaniu, może zadziała :D

    unsigned char liczLRC(char ramka[],dlugosc)
    {
      unsigned char suma=0;
      char i;
      unsigned char lrc;
    
      for (i=1;i<=dlugosc;i++)
          suma+=ramka[i];
      
      lrc=~suma+1;
      return lrc;  
    }


    Pozdrawiam!


    1. CRC to nie jest liczba ujmena w kodzie U2.
    2. Unsigned char modulo 256? Szczególnie, że zakres tego typu zmiennej to 255 (to duzo się da tych kodów ASCII w tej zmiennej zsumować?).

    Wniosek: jak nie wiesz o co chodzi to nie pisz głupot, zła informacja jest gorsza niż brak informacji.
REKLAMA