* Vrácená hodnota Vypočítaný součet
*/
celočíselný kontrolní součet (znak bez znaménka
*vyrovn.délka)
{
zkrácený bez znaménka *p; Ukazatel další
dvoubytové datové slovo vyrovn.paměti, která se
má sečíst. */
kontrolní součet *p++;
jestliže(lichá){ Když datová délka lichá */
sjednocený tmp{ Vložka přidat zkráceným
datům bez znaménka.součet (kontr. */
if(odd)i When the data length odd *J
union tmp{ Pad with and add the unsigned short data.paměť, celočísel.P-355333 PŘÍRUČKA UŽIVATELE KOMUNIKAČNÍHO ROZHRANÍ TYP 559
6.kontrolní součet bez znaménka; Hodnota
kontrolního součtu */
celočísel. *!
unsigned short s;
unsigned char [2];
Jt-rp;
tm p. Pokud číslice přebývá,
přidá se“1”. */
p (zkrácené bez znaménka vyrovn.součet kontr. (1) (6) se
sečtou jako dvoubytová celá čísla bez znaménka (krátká čísla bez znaménka).součet 0xffff; Jestliže opět
přebývá číslice, přidejte */
návrat ((-kontr.1 Syntax odezvy
Výpočet součtové hodnoty
Když parametr povelu nastaven “1,” výstup hodnot kontrolního součtu provádí pouze během
sériových komunikací. */
len >>= Určete počet datových bodů použitím
„zkráceného“ typu dat.součet) 0xffff); bitová inverze */
}
programem vrátí vypočítaný výsledek. */
len Determine the number data points using "short' data type. */
Celočísel.”
1byla výplň
T~
<0 <2> (3} {4) (5)
Jestliže datová délka vyrovnávací paměti lichá, použije výplň “0”, takže stane sudou. i;
celé liché číslo;
kontrolní součet Inicializovat.c[0] *(( znak bez znaménka *)p);
kontrolní součet tmp.součet >>16) 0xffff)) 0xffff)
/* Přidat přebývající číslice */
kontr.
• Pro součet dat vypočítá “Binárních dat.
* len Délka dat, nichž počítá součet.c[1] 0;
tmp. */
lichá délka%2; Zkontrolujte, zda počet datových
bodů sudý nikoli. *i
p (unsigned short
fo r{i=a;i<Len;i++)
csum *p++j
/* Sum using unsigned short data type. Kontrolní součet stejný jako TCP/IP odvozen podle následujícího
algoritmu. Nakonec výsledek bitech invertuje.součet 0xffff) +
((kontr. Součet
součtem záhlaví úseku výstupu binárního záhlaví a
VIZ ORIGINAL
Sum Calculation Function (for 32-bit CPU)
; Parameter buff
: len
: Returned value
Pointer the top the data which the sum calculated
Length the data which the sum calculated
Calculated sum
in cksum(unsigned char *buff, len)
{
unsigned short *p; Pointer the next tsre-byte data word tbs buffer that sumed.cIO] *((unsigned char *)p);
csura tmp.
Vyrovnávací pam které počítá hodnota součtu
• Pro součet záhlaví vypočítá “datové délky příznak identifikátor” (pevně bytů).s;
ifiicsum (csu* Oxffff) 4(C5um»16) Dxffff)) Qxffff)
f* Add the overflowed its */
csura csum Oxffff; the overflows again, add *t
return((-»csum) Oxffff); inversion *!
6-4
132/176
.
unsigned csumj Checksum value *f
in ;
in odd;
csum itia liz */
odd len'2; Check whether not the number ofdata points even.
Vzorový program
Součtová hodnota určí následujícím vzorovým
určený vzorovým programem může porovnat se
datovým součtem úseku výstupu binárního zápatí.
/*
* Funkce výpočtu součtu (pro 32-bitovou CPU)
*
* Vyrovnávací paměť parametrů Ukazatel vrchol
dat, nichž počítá součet.paměť;
pro(i=0;i<len;i++) Součet použitím druhu zkrácených
dat bez znaménka. */
zkrácená bez znaménka s;
znak bez znaménka c[2];
} tmp;
tmp.s;
}
jestliže((kontr.e[l] Of
tmp