Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Przetłumaczenie z c++ na delphi , suma kontrolna

237 views
Skip to first unread message

przemek.ro...@gmail.com

unread,
Apr 7, 2013, 11:17:52 AM4/7/13
to
Witam!
Proszę ludzi dobrej woli o przetłumaczenie kodu na delphi:
(suma kontrolna w drukarce posnet thermal hd fv ej - pewnie wielu się później przyda)

unsigned char crc16htab[] = {
0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70,
0x81, 0x91, 0xa1, 0xb1, 0xc1, 0xd1, 0xe1, 0xf1,
0x12, 0x02, 0x32, 0x22, 0x52, 0x42, 0x72, 0x62,
0x93, 0x83, 0xb3, 0xa3, 0xd3, 0xc3, 0xf3, 0xe3,
0x24, 0x34, 0x04, 0x14, 0x64, 0x74, 0x44, 0x54,
0xa5, 0xb5, 0x85, 0x95, 0xe5, 0xf5, 0xc5, 0xd5,
0x36, 0x26, 0x16, 0x06, 0x76, 0x66, 0x56, 0x46,
0xb7, 0xa7, 0x97, 0x87, 0xf7, 0xe7, 0xd7, 0xc7,
0x48, 0x58, 0x68, 0x78, 0x08, 0x18, 0x28, 0x38,
0xc9, 0xd9, 0xe9, 0xf9, 0x89, 0x99, 0xa9, 0xb9,
0x5a, 0x4a, 0x7a, 0x6a, 0x1a, 0x0a, 0x3a, 0x2a,
0xdb, 0xcb, 0xfb, 0xeb, 0x9b, 0x8b, 0xbb, 0xab,
0x6c, 0x7c, 0x4c, 0x5c, 0x2c, 0x3c, 0x0c, 0x1c,
0xed, 0xfd, 0xcd, 0xdd, 0xad, 0xbd, 0x8d, 0x9d,
0x7e, 0x6e, 0x5e, 0x4e, 0x3e, 0x2e, 0x1e, 0x0e,
0xff, 0xef, 0xdf, 0xcf, 0xbf, 0xaf, 0x9f, 0x8f,
0x91, 0x81, 0xb1, 0xa1, 0xd1, 0xc1, 0xf1, 0xe1,
0x10, 0x00, 0x30, 0x20, 0x50, 0x40, 0x70, 0x60,
0x83, 0x93, 0xa3, 0xb3, 0xc3, 0xd3, 0xe3, 0xf3,
0x02, 0x12, 0x22, 0x32, 0x42, 0x52, 0x62, 0x72,
0xb5, 0xa5, 0x95, 0x85, 0xf5, 0xe5, 0xd5, 0xc5,
0x34, 0x24, 0x14, 0x04, 0x74, 0x64, 0x54, 0x44,
0xa7, 0xb7, 0x87, 0x97, 0xe7, 0xf7, 0xc7, 0xd7,
0x26, 0x36, 0x06, 0x16, 0x66, 0x76, 0x46, 0x56,
0xd9, 0xc9, 0xf9, 0xe9, 0x99, 0x89, 0xb9, 0xa9,
0x58, 0x48, 0x78, 0x68, 0x18, 0x08, 0x38, 0x28,
0xcb, 0xdb, 0xeb, 0xfb, 0x8b, 0x9b, 0xab, 0xbb,
0x4a, 0x5a, 0x6a, 0x7a, 0x0a, 0x1a, 0x2a, 0x3a,
0xfd, 0xed, 0xdd, 0xcd, 0xbd, 0xad, 0x9d, 0x8d,
0x7c, 0x6c, 0x5c, 0x4c, 0x3c, 0x2c, 0x1c, 0x0c,
0xef, 0xff, 0xcf, 0xdf, 0xaf, 0xbf, 0x8f, 0x9f,
0x6e, 0x7e, 0x4e, 0x5e, 0x2e, 0x3e, 0x0e, 0x1e};
unsigned char crc16ltab[] = {
0x00, 0x21, 0x42, 0x63, 0x84, 0xa5, 0xc6, 0xe7,
0x08, 0x29, 0x4a, 0x6b, 0x8c, 0xad, 0xce, 0xef,
0x31, 0x10, 0x73, 0x52, 0xb5, 0x94, 0xf7, 0xd6,
0x39, 0x18, 0x7b, 0x5a, 0xbd, 0x9c, 0xff, 0xde,
0x62, 0x43, 0x20, 0x01, 0xe6, 0xc7, 0xa4, 0x85,
0x6a, 0x4b, 0x28, 0x09, 0xee, 0xcf, 0xac, 0x8d,
0x53, 0x72, 0x11, 0x30, 0xd7, 0xf6, 0x95, 0xb4,
0x5b, 0x7a, 0x19, 0x38, 0xdf, 0xfe, 0x9d, 0xbc,
0xc4, 0xe5, 0x86, 0xa7, 0x40, 0x61, 0x02, 0x23,
0xcc, 0xed, 0x8e, 0xaf, 0x48, 0x69, 0x0a, 0x2b,
0xf5, 0xd4, 0xb7, 0x96, 0x71, 0x50, 0x33, 0x12,
0xfd, 0xdc, 0xbf, 0x9e, 0x79, 0x58, 0x3b, 0x1a,
0xa6, 0x87, 0xe4, 0xc5, 0x22, 0x03, 0x60, 0x41,
0xae, 0x8f, 0xec, 0xcd, 0x2a, 0x0b, 0x68, 0x49,
0x97, 0xb6, 0xd5, 0xf4, 0x13, 0x32, 0x51, 0x70,
0x9f, 0xbe, 0xdd, 0xfc, 0x1b, 0x3a, 0x59, 0x78,
0x88, 0xa9, 0xca, 0xeb, 0x0c, 0x2d, 0x4e, 0x6f,
0x80, 0xa1, 0xc2, 0xe3, 0x04, 0x25, 0x46, 0x67,
0xb9, 0x98, 0xfb, 0xda, 0x3d, 0x1c, 0x7f, 0x5e,
0xb1, 0x90, 0xf3, 0xd2, 0x35, 0x14, 0x77, 0x56,
0xea, 0xcb, 0xa8, 0x89, 0x6e, 0x4f, 0x2c, 0x0d,
0xe2, 0xc3, 0xa0, 0x81, 0x66, 0x47, 0x24, 0x05,
0xdb, 0xfa, 0x99, 0xb8, 0x5f, 0x7e, 0x1d, 0x3c,
0xd3, 0xf2, 0x91, 0xb0, 0x57, 0x76, 0x15, 0x34,
0x4c, 0x6d, 0x0e, 0x2f, 0xc8, 0xe9, 0x8a, 0xab,
0x44, 0x65, 0x06, 0x27, 0xc0, 0xe1, 0x82, 0xa3,
0x7d, 0x5c, 0x3f, 0x1e, 0xf9, 0xd8, 0xbb, 0x9a,
0x75, 0x54, 0x37, 0x16, 0xf1, 0xd0, 0xb3, 0x92,
0x2e, 0x0f, 0x6c, 0x4d, 0xaa, 0x8b, 0xe8, 0xc9,
0x26, 0x07, 0x64, 0x45, 0xa2, 0x83, 0xe0, 0xc1,
0x1f, 0x3e, 0x5d, 0x7c, 0x9b, 0xba, 0xd9, 0xf8,
0x17, 0x36, 0x55, 0x74, 0x93, 0xb2, 0xd1, 0xf0};


unsigned char hi=0, lo=0, index;
const char *s= "Ala ma kota.";
printf ( "crc od '%s' wynosi: ", s);
for (s;*s;s++)
{ index = hi ^ *s;
hi = lo ^ crc16htab[index];
lo = crc16ltab[index];
}
printf ( "%04X", (hi << 8) | lo );

Bardzo ładnie proszę o pomoc, na pewno wielu osobom sie przyda jak będą zajmować się nowym protokołem.

pozdrawiam
Przemek

Piotr Rezmer

unread,
Apr 7, 2013, 2:31:38 PM4/7/13
to
przemek.ro...@gmail.com pisze:
> Witam!
> Prosz� ludzi dobrej woli o przet�umaczenie kodu na delphi:
> (suma kontrolna w drukarce posnet thermal hd fv ej - pewnie wielu si� p�niej przyda)

Na szybko, to b�dzie co� w tym stylu:
unit unit1;

interface

var
crc16htab: array [0..255] of byte =
($00,$10,$20,$30,$40,$50,$60,$70,$81,$91,$a1,$b1,$c1,$d1,$e1,$f1,$12,$02,$32,$22,$52,$42,$72,$62,$93,$83,$b3,$a3,$d3,$c3,$f3,$e3,$24,$34,$04,$14,$64,$74,$44,$54,$a5,$b5,$85,$95,$e5,$f5,$c5,$d5,$36,$26,$16,$06,$76,$66,$56,$46,$b7,$a7,$97,$87,$f7,$e7,$d7,$c7,$48,$58,$68,$78,$08,$18,$28,$38,$c9,$d9,$e9,$f9,$89,$99,$a9,$b9,$5a,$4a,$7a,$6a,$1a,$0a,$3a,$2a,$db,$cb,$fb,$eb,$9b,$8b,$bb,$ab,$6c,$7c,$4c,$5c,$2c,$3c,$0c,$1c,$ed,$fd,$cd,$dd,$ad,$bd,$8d,$9d,$7e,$6e,$5e,$4e,$3e,$2e,$1e,$0e,$ff,$ef,$df,$cf,$bf,$af,$9f,$8f,$91,$81,$b1,$a1,$d1,$c1,$f1,$e1,$10,$00,$30,$20,$50,$40,$70,$60,$83,$93,$a3,$b3,$c3,$d3,$e3,$f3,$02,$12,$22,$32,$42,$52,$62,$72,$b5,$a5,$95,$85,$f5,$e5,$d5,$c5,$34,$24,$14,$04,$74,$64,$54,$44,$a7,$b7,$87,$97,$e7,$f7,$c7,$d7,$26,$36,$06,$16,$66,$76,$46,$56,$d9,$c9,$f9,$e9,$99,$89,$b9,$a9,$58,$48,$78,$68,$18,$08,$38,$28,$cb,$db,$eb,$fb,$8b,$9b,$ab,$bb,$4a,$5a,$6a,$7a,$0a,$1a,$2a,$3a,$fd,$ed,$dd,$cd,$bd,$ad,$9d,$8d,$7c,$6c,$5c,$4c,$3c,$2c,$1c,$0c,$ef,$ff,$cf,$df,$af,$bf,$8f,$9f,$6e,
$7e,$4e,$5e,$2e,$3e,$0e,$1e);
crc16ltab: array [0..255] of byte =
($00,$21,$42,$63,$84,$a5,$c6,$e7,$08,$29,$4a,$6b,$8c,$ad,$ce,$ef,$31,$10,$73,$52,$b5,$94,$f7,$d6,$39,$18,$7b,$5a,$bd,$9c,$ff,$de,$62,$43,$20,$01,$e6,$c7,$a4,$85,$6a,$4b,$28,$09,$ee,$cf,$ac,$8d,$53,$72,$11,$30,$d7,$f6,$95,$b4,$5b,$7a,$19,$38,$df,$fe,$9d,$bc,$c4,$e5,$86,$a7,$40,$61,$02,$23,$cc,$ed,$8e,$af,$48,$69,$0a,$2b,$f5,$d4,$b7,$96,$71,$50,$33,$12,$fd,$dc,$bf,$9e,$79,$58,$3b,$1a,$a6,$87,$e4,$c5,$22,$03,$60,$41,$ae,$8f,$ec,$cd,$2a,$0b,$68,$49,$97,$b6,$d5,$f4,$13,$32,$51,$70,$9f,$be,$dd,$fc,$1b,$3a,$59,$78,$88,$a9,$ca,$eb,$0c,$2d,$4e,$6f,$80,$a1,$c2,$e3,$04,$25,$46,$67,$b9,$98,$fb,$da,$3d,$1c,$7f,$5e,$b1,$90,$f3,$d2,$35,$14,$77,$56,$ea,$cb,$a8,$89,$6e,$4f,$2c,$0d,$e2,$c3,$a0,$81,$66,$47,$24,$05,$db,$fa,$99,$b8,$5f,$7e,$1d,$3c,$d3,$f2,$91,$b0,$57,$76,$15,$34,$4c,$6d,$0e,$2f,$c8,$e9,$8a,$ab,$44,$65,$06,$27,$c0,$e1,$82,$a3,$7d,$5c,$3f,$1e,$f9,$d8,$bb,$9a,$75,$54,$37,$16,$f1,$d0,$b3,$92,$2e,$0f,$6c,$4d,$aa,$8b,$e8,$c9,$26,$07,$64,$45,$a2,$83,$e0,$c1,$1f,$3e,$5d,$7c,$9b,$ba,$d9,$f8,$17,
$36,$55,$74,$93,$b2,$d1,$f0);
index: byte;
sign : char;

const
hi: byte = 0;
lo: byte = 0;

type
TPosnet = class
class function getCrc( textMessage: string ):integer;
end;

implementation

uses
Sysutils;

var
textMessage: pchar = 'Ala ma kota.';

class function TPosnet.getCrc( textMessage: string ):integer;
var
buf : pchar;
begin
buf := PChar(textMessage);
while buf[0] <> #0 do
begin
index:= hi xor Ord(buf[1]);
hi:= lo xor crc16htab[index];
lo:= crc16ltab[index];
Inc(buf);
end;
result := (hi shl 8) or lo;
end;

begin
write(Format('crc od '#39'%s'#39' wynosi: %04X',[textMessage,
TPosnet.getCrc(textMessage)]));
end.


--
pozdrawiam
Piotr
XLR250&bmw_f650_dakar

Piotr Rezmer

unread,
Apr 7, 2013, 2:35:38 PM4/7/13
to
Piotr Rezmer pisze:

> var

> index: byte;
> sign : char;
>
> const
> hi: byte = 0;
> lo: byte = 0;
>

To oczywi�cie powinny by� zmienne lokalne wewn�trz getCrc()

--
pozdrawiam
Piotr
XLR250&bmw_f650_dakar

przemek.ro...@gmail.com

unread,
Apr 11, 2013, 11:13:20 AM4/11/13
to
Witam, dziękuje za funkcje,
niestety nie zwraca tego co powinna , dla ciągu 'cashstaterep' (zakończony znakiem TAB) zwraca 2AF4 a powinna (ta w c++ zwraca) C779

pozdrawiam
P.

R.e.m.e.K

unread,
Apr 11, 2013, 11:27:43 AM4/11/13
to
Dnia Thu, 11 Apr 2013 08:13:20 -0700 (PDT), przemek.ro...@gmail.com
napisał(a):

> Witam, dziękuje za funkcje,
> niestety nie zwraca tego co powinna , dla ciągu 'cashstaterep' (zakończony znakiem TAB) zwraca 2AF4 a powinna (ta w c++ zwraca) C779

A probowales to debugowac? Jesli masz Delphi unicodowe to moze problemem
jest uzywanie stringa i pchara zamiast pansichara i ansistringa?


--
pozdro
R.e.m.e.K

Przemek

unread,
Apr 11, 2013, 3:23:42 PM4/11/13
to
W dniu czwartek, 11 kwietnia 2013 17:27:43 UTC+2 użytkownik R.e.m.e.K napisał:
> Dnia Thu, 11 Apr 2013 08:13:20 -0700 (PDT), przemek.ro...@gmail.com
>
> napisał(a):
>
>
>
> > Witam, dziękuje za funkcje,
>
> > niestety nie zwraca tego co powinna , dla ciągu 'cashstaterep' (zakończony znakiem TAB) zwraca 2AF4 a powinna (ta w c++ zwraca) C779
>
>
>
> A probowales to debugowac? Jesli masz Delphi unicodowe to moze problemem
>


używam turbo delphi (tej pierwszej darmowej wersji), nie debugowałem

P.

R.e.m.e.K

unread,
Apr 11, 2013, 4:02:14 PM4/11/13
to
Dnia Sun, 07 Apr 2013 20:31:38 +0200, Piotr Rezmer napisał(a):

> class function TPosnet.getCrc( textMessage: string ):integer;
> var
> buf : pchar;
> begin
> buf := PChar(textMessage);
> while buf[0] <> #0 do
> begin

Rzucilem raz jeszcze okiem (co powinien zrobic sam zainteresowany kurde!) i
w ponizszej linii ma byc buf[0] a nie buf[1] - wtedy liczy prawidlowo.

> index:= hi xor Ord(buf[1]);


--
pozdro
R.e.m.e.K

Piotr Rezmer

unread,
Apr 12, 2013, 1:33:37 AM4/12/13
to
R.e.m.e.K pisze:

> Rzucilem raz jeszcze okiem (co powinien zrobic sam zainteresowany kurde!) i
> w ponizszej linii ma byc buf[0] a nie buf[1] - wtedy liczy prawidlowo.
>
>> index:= hi xor Ord(buf[1]);

Dzięki za rozwiązanie. Faktycznie, w pętli sprawdzam buf[0] a odwołuję
się do buf[1]. Wstyd :$
--
pozdrawiam
Piotr
XLR250&bmw_f650_dakar

R.e.m.e.K

unread,
Apr 12, 2013, 1:40:14 AM4/12/13
to
Dnia Fri, 12 Apr 2013 07:33:37 +0200, Piotr Rezmer napisał(a):

>> Rzucilem raz jeszcze okiem (co powinien zrobic sam zainteresowany kurde!) i
>> w ponizszej linii ma byc buf[0] a nie buf[1] - wtedy liczy prawidlowo.
>>
>>> index:= hi xor Ord(buf[1]);
>
> Dzięki za rozwiązanie. Faktycznie, w pętli sprawdzam buf[0] a odwołuję
> się do buf[1]. Wstyd :$

Zaden tam wstyd, proza programistycznej codziennosci, z tego powstaja sevice
packi ;-)

--
pozdro
R.e.m.e.K

Przemek

unread,
Apr 13, 2013, 7:55:06 AM4/13/13
to
Dziękuje Wam, teraz działa wyśmienicie

P.
0 new messages