Mi skribis jenan C-funkcion:
int char2long(unsigned char *aro, long nombro)
{
nombro = aro[3]*0x1000000 + aro[2]*0x10000
+ aro[1]*0x100 + aro[0];
return 1;
}
Mi intencis, ke tabelo de 4 char-elementoj transformiĝu en longan entjeron. Sed ĝi ne funkciis tiel, kiel mi intencis.
Mi ja forgesis plej bazan regulon de C-funkcio. Ke funkcio estas vokata kun valoro de parametro (ne kun referenco al parametro). La funkcio ne redonas al vokanta proceduro modifitan valoron de la variablo “nombro”.
Mi devis skribi jene:
long char2long(unsigned char *aro)
{
return aro[3]*0x1000000 + aro[2]*0x10000
+ aro[1]*0x100 + aro[0];
}
Vi povus skribi kiel vi skribis komence kondicxe, ke vi skribus adreson de via variablo kaj ne gxin mem. Tiel
int char2long(unsigned char *aro, long *nombro)
{
*nombro = aro[3]*0×1000000 + aro[2]*0×10000
+ aro[1]*0×100 + aro[0];
return 1;
}
Tiel por vokus vian funkcion en via programo vi devus fari tion.
long variablo;
char2long(viaAro, &variablo);
Tiel gxi funkciis.