LyogIEJlcmVjaG51bmcgZGVzIEhhbW1pbmctQWJzdGFuZGVzIHp3aXNjaAojaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKI2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OwoKI2RlZmluZSBBUlJBWV9TSVpFIDMyCgp1bnNpZ25lZCBIYW1kaXN0KHVuc2lnbmVkIHgsIHVuc2lnbmVkIHkpCnsKICB1bnNpZ25lZCBkaXN0ID0gMCwgdmFsID0geCBeIHk7CiAKICAvLyBDb3VudCB0aGUgbnVtYmVyIG9mIHNldCBiaXRzCiAgd2hpbGUodmFsKQogIHsKICAgICsrZGlzdDsgCiAgICB2YWwgJmFtcDs9IHZhbCAtIDE7CiAgfQogCiAgcmV0dXJuIGRpc3Q7Cn0KCgoKaW50IG1haW4gKHZvaWQpCnsKCWNoYXIgaGV4OwoJaW50IGk7CglpbnQgYVtBUlJBWV9TSVpFXTsKCWludCBiW0FSUkFZX1NJWkVdOwoJaW50IGhhbURpc3QgPSAwOwoJRklMRSogZnA7CgkKCS8vQXJyYXlzIG1pdCAwIGluaXRpYWxpc2llcmVuCglmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRTsgKytpKQoJewogIAkJYVtpXSA9IDA7CiAgCQliW2ldID0gMDsKCX0KCgkKCWZwID0gZm9wZW4oJnF1b3Q7aGV4LnR4dCZxdW90OywmcXVvdDtyJnF1b3Q7KTsKCWlmIChmcCA9PSBOVUxMKSAKCXsKCQlwcmludGYoJnF1b3Q7RGllIERhdGVpIGhleC50eHQgd3VyZGUgbmljaHQgZ2VmdW5kZW4hJnF1b3Q7KTsKCQlleGl0KEVYSVRfRkFJTFVSRSk7Cgl9CgoJaT0wOwoJcHJpbnRmKCZxdW90OzEuWmVpbGUgZWlubGVzZW4uXG4mcXVvdDspOwoKIAl3aGlsZSgoaGV4PWZnZXRjKGZwKSkhPSdcbicgJmFtcDsmYW1wOyBoZXggIT0gRU9GKQogICAgewogICAgICAgIGFbaV09c3RydG9sKCZhbXA7aGV4LDAsMTYpOwoJCWkrKzsKICAgIH0KCWk9MDsKCXByaW50ZigmcXVvdDsyLlplaWxlIGVpbmxlc2VuLlxuJnF1b3Q7KTsKCiAJd2hpbGUoKGhleD1mZ2V0YyhmcCkpIT0nXG4nICZhbXA7JmFtcDsgaGV4ICE9IEVPRikKICAgIHsKICAgIAliW2ldPXN0cnRvbCgmYW1wO2hleCwwLDE2KTsKICAgICAgICBpKys7CiAgICB9CglmY2xvc2UoZnApOwoKCXByaW50ZigmcXVvdDtIYW1taW5nLUFid2VpY2h1bmcgcHJvIE5pYmJsZTpcbiZxdW90Oyk7Cglmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRTsgKytpKQoJewoJCXByaW50ZiAoJnF1b3Q7JWlcdCVpXHQlaVxuJnF1b3Q7LGFbaV0sYltpXSxIYW1kaXN0KGFbaV0sYltpXSkpOwoJCWhhbURpc3QgKz0gSGFtZGlzdChhW2ldLGJbaV0pOwoJfQoJcHJpbnRmICgmcXVvdDtcbkhhbW1pbmctQWJ3ZWljaHVuZyBkZXIgSGFzaC1XZXJ0ZTolZFxuJnF1b3Q7LGhhbURpc3QpOwp9Cgo=
/* Berechnung des Hamming-Abstandes zwisch
#include <stdio.h>
#include <stdlib.h>
#define ARRAY_SIZE 32
unsigned Hamdist(unsigned x, unsigned y)
{
unsigned dist = 0, val = x ^ y;
// Count the number of set bits
while(val)
{
++dist;
val &= val - 1;
}
return dist;
}
int main (void)
{
char hex;
int i;
int a[ARRAY_SIZE];
int b[ARRAY_SIZE];
int hamDist = 0;
FILE* fp;
//Arrays mit 0 initialisieren
for (i = 0; i < ARRAY_SIZE; ++i)
{
a[i] = 0;
b[i] = 0;
}
fp = fopen("hex.txt","r");
if (fp == NULL)
{
printf("Die Datei hex.txt wurde nicht gefunden!");
exit(EXIT_FAILURE);
}
i=0;
printf("1.Zeile einlesen.\n");
while((hex=fgetc(fp))!='\n' && hex != EOF)
{
a[i]=strtol(&hex,0,16);
i++;
}
i=0;
printf("2.Zeile einlesen.\n");
while((hex=fgetc(fp))!='\n' && hex != EOF)
{
b[i]=strtol(&hex,0,16);
i++;
}
fclose(fp);
printf("Hamming-Abweichung pro Nibble:\n");
for (i = 0; i < ARRAY_SIZE; ++i)
{
printf ("%i\t%i\t%i\n",a[i],b[i],Hamdist(a[i],b[i]));
hamDist += Hamdist(a[i],b[i]);
}
printf ("\nHamming-Abweichung der Hash-Werte:%d\n",hamDist);
}