f
Warning: Cannot modify header information - headers already sent by (output started at /home/anderian/ftp/www_forum/db/mysql4.php:1) in /home/anderian/ftp/www_forum/includes/sessions.php on line 548

Warning: Cannot modify header information - headers already sent by (output started at /home/anderian/ftp/www_forum/db/mysql4.php:1) in /home/anderian/ftp/www_forum/includes/sessions.php on line 549

Warning: Cannot modify header information - headers already sent by (output started at /home/anderian/ftp/www_forum/db/mysql4.php:1) in /home/anderian/ftp/www_forum/includes/page_header.php on line 343
And-Tech :: Zobacz temat - CRC32 z sumy wartości wyrazów 0...255

Strona korzysta z plików cookie w celu realizacji usług zgodnie z Politykš prywatnoœci.

Możesz okreœlić warunki przechowywania lub dostępu do cookie w Twojej przeglšdarce lub konfiguracji usługi.

And-Tech Strona Główna And-Tech
Forum firmy And-Tech

FAQFAQ  SzukajSzukaj  UżytkownicyUżytkownicy  GrupyGrupy
RejestracjaRejestracja  ZalogujZaloguj  AlbumAlbum  DownloadDownload

Poprzedni temat «» Następny temat
CRC32 z sumy wartości wyrazów 0...255
Autor Wiadomość
mes mariusz 

Dołączył: 30 Mar 2016
Posty: 1
  Wysłany: Sro Mar 30, 2016 10:47 am   CRC32 z sumy wartości wyrazów 0...255

Witam. Poniższy program oblicza sumę kolejnych wyrazów od 0 do 255, a następnie wylicza CRC32 z tej sumy.

Kod:
#include <boost/crc.hpp>
#include <boost/lexical_cast.hpp>
#include <string>
#include <iostream>
#include <algorithm>

int main()
{
   int licznik = 0;
   int suma = 0;

   for ( licznik = 0; licznik <= 255; licznik++ )
    {
        suma = suma + licznik ;
        std::cout << "Wyraz: " << licznik << " --> Suma: " << suma << std::endl;

    }

   std::string str = boost::lexical_cast<std::string>(suma);
   boost::crc_32_type crc32;
   crc32 = std::for_each(str.begin(), str.end(), crc32);
   std::cout << "CRC32: " << crc32() << std::endl;
   system( "PAUSE" );
}


Wynik działania jest następujący:

http://pastebin.com/cErnR8K6


Chciałbym podobny efekt uzyskać w języku BASCOM AVR. Znajdzie się ktoś, kto pomoże?

Dodam, że w języku BASCOM AVR istnieje gotowa funkcja Crc32(), ale to coś, co wylicza do niczego się nie nadaje (nie do końca wiadomo, co wylicza, w każdym razie wyniki się nie pokrywają).

Dziękuję
 
     
Piotr41

Dołączył: 18 Sty 2010
Posty: 9
  Wysłany: Pią Maj 20, 2016 4:26 pm   

1. Nie czytasz Help'a w Bascmie, a napisane jest wszytko i podany przykłady
2. Naucz się rozróżniać ciągi znaków od cyfr
3. Doszkol się w konwersjach Sting, Hex, Dec
4. Naucz się posługiwać tablicami
5. Nigdy nie pisz, że jakiś język coś robi nie tak, jeśli go nie znasz
6. CRC32 i inne w Bascomie działają perfekcyjnie i wyniki są zgodne z każdym online kalkulatorem w sieci
7. Bascom do transmisji pomiędzy urządzeniami RS232, RS485, i kodowaniem CAN,MODBUS RTU/ASCII, Motorola,ASK, OOK, etc....... jest genialny i bardzo prosty.
8. Podaję poniżej przykład, trochę okrężnymi drogami napisany, ale dający możliwość zrozumienia działania kalkulatora CRC w Bascomie. Program wylicza dane dla jednej wartości w zakresie od 0 do 255
9. Program w HELP'e Bascoma liczy 3 warości z tablicy czyl 1,2,3, a nie jak opisujesz 123, to znacząca różnica dlatego są inne wartości CRC


Kod:

$regfile = "m8def.dat"
$crystal = 8000000


Dim Ar(1) As Byte
Dim L As Long
Dim K As Byte
Dim C32 As String * 14
Dim T As String * 10


For K = 0 To 255
Print "Obliczenie CRC32 dla wartości: " ; K
Ar(1) = K

L = Crc32(ar(1) , 1)
C32 = Hex(crc32(ar(1) , 1))

T = Mid(c32 , 7 , 2)
T = T + Mid(c32 , 5 , 2)
T = T + Mid(c32 , 3 , 2)
T = T + Mid(c32 , 1 , 2)
Print "ReversHEX: " ; T
Print
T = ""
Next K




Teraz ten sam program ale liczy CRC32, dla jednej wartości "123"
Wynik w Bacom : 15d54739

Kod:

$regfile = "m8def.dat"
$crystal = 8000000


Dim A As Byte
Dim L As Long
Dim C32 As String * 14
Dim T As String * 10


Print "Obliczenie CRC32 dla wartości: 123"
A = 123

L = Crc32(a , 1)
C32 = Hex(crc32(a , 1))

T = Mid(c32 , 7 , 2)
T = T + Mid(c32 , 5 , 2)
T = T + Mid(c32 , 3 , 2)
T = T + Mid(c32 , 1 , 2)
Print "HEX: " ; T


Sprawdzamy z pierwszym odnalezionym kalkulatorem CRC32 w Google.pl
http://www.lammertbies.nl...alculation.html


wybieramy opcję Input type:Hex
wpisujemy wartość HEX "7b" czyli dziesiętnie "123"
Wciskamy Calculate CRC
Wynik 0x15D54739 czyli jednak Bascom liczy dobrze, a programista ma ogromne luki wiedzy.

Na koniec wersja minimalistyczna, wynik dziesiętnie przedstawiony w rewersie bajtowym.
Kod:

$regfile = "m8def.dat"
$crystal = 8000000


Dim A As Byte
Dim L As Long

A = 123
L = Crc32(a , 1)
Print "CRC32 Dziesiętnie Reversie: " ; l
Ostatnio zmieniony przez Piotr41 Sro Maj 25, 2016 10:02 pm, w całości zmieniany 1 raz  
 
     
Piotr41

Dołączył: 18 Sty 2010
Posty: 9
Wysłany: Pią Maj 20, 2016 5:37 pm   

1. Nie czytasz Help'a w Bascmie, a napisane jest wszytko i podany przykłady
2. Naucz się rozróżniać ciągi znaków od cyfr
3. Doszkol się w konwersjach Sting, Hex, Dec
4. Naucz się posługiwać tablicami
5. Nigdy nie pisz, że jakiś język coś robi nie tak, jeśli go nie znasz
6. CRC32 i inne w Bascomie działają perfekcyjnie i wyniki są zgodne z każdym online kalkulatorem w sieci
7. Bascom do transmisji pomiędzy urządzeniami RS232, RS485, i kodowaniem CAN,MODBUS RTU/ASCII, Motorola,ASK, OOK, etc....... jest genialny i bardzo prosty.
8. Podaję poniżej przykład, trochę okrężnymi drogami napisany, ale dający możliwość zrozumienia działania kalkulatora CRC w Bascomie. Program wylicza dane dla jednej wartości w zakresie od 0 do 255
9. Program w HELP'e Bascoma liczy 3 warości z tablicy czyl 1,2,3, a nie jak opisujesz 123, to znacząca różnica dlatego są inne wartości CRC


Kod:

$regfile = "m8def.dat"
$crystal = 8000000


Dim Ar(1) As Byte
Dim L As Long
Dim K As Byte
Dim C32 As String * 14
Dim T As String * 10


For K = 0 To 255
Print "Obliczenie CRC32 dla wartości: " ; K
Ar(1) = K

L = Crc32(ar(1) , 1)
C32 = Hex(crc32(ar(1) , 1))

T = Mid(c32 , 7 , 2)
T = T + Mid(c32 , 5 , 2)
T = T + Mid(c32 , 3 , 2)
T = T + Mid(c32 , 1 , 2)
Print "ReversHEX: " ; T
Print
T = ""
Next K




Teraz ten sam program ale liczy CRC32, dla jednej wartości "123"
Wynik w Bacom : 15d54739

Kod:

$regfile = "m8def.dat"
$crystal = 8000000


Dim A As Byte
Dim L As Long
Dim C32 As String * 14
Dim T As String * 10


Print "Obliczenie CRC32 dla wartości: 123"
A = 123

L = Crc32(a , 1)
C32 = Hex(crc32(a , 1))

T = Mid(c32 , 7 , 2)
T = T + Mid(c32 , 5 , 2)
T = T + Mid(c32 , 3 , 2)
T = T + Mid(c32 , 1 , 2)
Print "HEX: " ; T


Sprawdzamy z pierwszym odnalezionym kalkulatorem CRC32 w Google.pl

[URL=http://www.lammertbies.nl/comm/info/crc-calculation.html][/URL]

wybieramy opcję Input type:Hex
wpisujemy wartość HEX "7b" czyli dziesiętnie "123"
Wciskamy Calculate CRC
Wynik 0x15D54739 czyli jednak Bascom liczy dobrze, a programista ma ogromne luki wiedzy.

Na koniec wersja minimalistyczna, wynik dziesiętnie przedstawiony w rewersie bajtowym.
Kod:

$regfile = "m8def.dat"
$crystal = 8000000


Dim A As Byte
Dim L As Long

A = 123
L = Crc32(a , 1)
Print "CRC32 Dziesiętnie Reversie: " ; l


Tak obliczysz sumy:
Kod:

For K = 0 To 255
Incr L
Suma = Suma + K
Print Suma
Next K


Teraz wystarczy przepisać do tablicy wyniki i obliczyć CRC32
Ponieważ Wartości liczbowe są duże , przypisz odpowiednie wielkości zmiennych możliwe że będzie potrzebne Dword
 
     
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group