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ů). */
len >>= Určete počet datových bodů použitím
„zkráceného“ typu dat.P-355333 PŘÍRUČKA UŽIVATELE KOMUNIKAČNÍHO ROZHRANÍ TYP 559
6. i;
celé liché číslo;
kontrolní součet Inicializovat.kontrolní součet bez znaménka; Hodnota
kontrolního součtu */
celočísel. */
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.e[l] Of
tmp. 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.c[1] 0;
tmp.
unsigned csumj Checksum value *f
in ;
in odd;
csum itia liz */
odd len'2; Check whether not the number ofdata points even. Kontrolní součet stejný jako TCP/IP odvozen podle následujícího
algoritmu.s;
}
jestliže((kontr. */
zkrácená bez znaménka s;
znak bez znaménka c[2];
} tmp;
tmp.
• Pro součet dat vypočítá “Binárních dat. */
len Determine the number data points using "short' data type.paměť;
pro(i=0;i<len;i++) Součet použitím druhu zkrácených
dat bez znaménka. *!
unsigned short s;
unsigned char [2];
Jt-rp;
tm p.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
.součet kontr.součet 0xffff; Jestliže opět
přebývá číslice, přidejte */
návrat ((-kontr. */
p (zkrácené bez znaménka vyrovn.součet 0xffff) +
((kontr. Pokud číslice přebývá,
přidá se“1”.c[0] *(( znak bez znaménka *)p);
kontrolní součet tmp.paměti, která se
má sečíst.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í. */
Celočísel.součet) 0xffff); bitová inverze */
}
programem vrátí vypočítaný výsledek. (1) (6) se
sečtou jako dvoubytová celá čísla bez znaménka (krátká čísla bez znaménka).součet (kontr.
* len Délka dat, nichž počítá součet.součet >>16) 0xffff)) 0xffff)
/* Přidat přebývající číslice */
kontr. */
if(odd)i When the data length odd *J
union tmp{ Pad with and add the unsigned short data.
/*
* Funkce výpočtu součtu (pro 32-bitovou CPU)
*
* Vyrovnávací paměť parametrů Ukazatel vrchol
dat, nichž počítá součet.
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í.cIO] *((unsigned char *)p);
csura tmp. */
lichá délka%2; Zkontrolujte, zda počet datových
bodů sudý nikoli. Nakonec výsledek bitech invertuje.délka)
{
zkrácený bez znaménka *p; Ukazatel další
dvoubytové datové slovo vyrovn. *i
p (unsigned short
fo r{i=a;i<Len;i++)
csum *p++j
/* Sum using unsigned short data type.paměť, 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.
* Vrácená hodnota Vypočítaný součet
*/
celočíselný kontrolní součet (znak bez znaménka
*vyrovn