Cześć.
Wzorując się jakimś znalezionym w sieci kodem, napisałem sobie funkcję, która będzie mi sumowała bajty zapisanej w pamięci struktury.
Docelowo kod ten ma być pomocny w policzeniu sumy kontrolnej.
Spotkałem się jednak ze stwierdzeniem, że nie powinno się rzutować na unsigned short * jeżeli w pamięci nie są faktycznie przechowywane dane typu short, natomiast powinno się rzutować na typ char *.
Dlaczego?
Które stwierdzenie jest poprawne i które powinno się stosować?
#include <stdio.h>
#include <string.h>
struct pseudo_header
{
int var1;
int var2;
char name[25];
};
void csum(const unsigned short* ptr, int nbytes)
{
unsigned long sum = 0;
for(int i = 0; i < sizeof(struct pseudo_header); i++)
{
sum+= ptr[i];
}
printf("%lu", sum);
}
int main() {
struct pseudo_header psh;
char datagram[4096];
psh.var1 = 10;
psh.var2 = 20;
strcpy(psh.name, "test");
memcpy(datagram, &psh, sizeof(struct pseudo_header));
csum((unsigned short*)datagram, sizeof(struct pseudo_header));
return 0;
}