CRC Prüfung



  • ja also die schleife läuft in der Tat sehr lange, das merkt man auch, wenn man das Programm startet, aber dennoch springt er iwann raus und gibt warum auch immer das vermutlich richtige Ergebnis aus. Zumindest kommt 0 raus, wenn sie rauskommen soll...



  • und ich hab mich schon über das

    \nBitte warten...");

    gewundert 😃



  • ja eben 🙂
    das dauert halt nur etwas länger, aber endlos ist sie offenbar nicht 👍

    Ich werds morgen wahrscheinlich eh hochladen müssen, aber eigetlich hast du Zeit bis Donnerstag... Deswegen brauch ich auch die Erklärung am besten zu jeder Zeile, weil ich nicht alles so ganz verstehe..



  • xX Dany Xx schrieb:

    aber eigetlich hast du Zeit bis Donnerstag

    also so war das eigentlich nicht gedacht...

    naja aber so sollts zumindest das machen was du willst...

    int findFirstBitSet(int i){
    	int x = 32;
    	while(x--){
    		if(i & 1<<x)
    			return x;
    	}
    	return -1;
    }
    int main(void) {
    	/*unsigned int a = 0x365;
    	unsigned int b = 0x35;*/
    
    	unsigned int b = 0x265;
    	unsigned int a = 0x35;
    
    	/*unsigned int a = 0xB99;
    	unsigned int b = 0x13;*/
    
    	unsigned int c;
    	unsigned int firstBit = 0x80000000;
    
    	int firstBitOfA = findFirstBitSet(a);
    	int firstBitOfB = findFirstBitSet(b);
    	int dataBits = firstBitOfA - firstBitOfB;
    	int bShift = 31-firstBitOfB;
    
    	if(dataBits<0){
    		printf("Error: Sendepolynom < Generatorpolynom;");
    		exit(1);
    	}
    
    	a<<=31-firstBitOfA;
    	b<<=bShift;
    
    	c=a^b;
    	while(dataBits--){
    	    if((c&firstBit) == 0)
    	    	c<<=1;
    	    if(c&firstBit)
    	        c^=b;
    	};
    
    	c>>=bShift;
    
    	printf("result: 0x%x",c);
    	return 0;
    }
    

    lg lolo



  • achso das ist natürlich bischen unglücklich

    while(dataBits--){
        if((c&firstBit) == 0)
            c<<=1;
        if(c&firstBit)
            c^=b;
    };
    

    besser wäre

    while(dataBits--){
        if((c&firstBit) == 0){
            c<<=1;
            if(c&firstBit)
                c^=b;
        }else
            c^=b;
    };
    

    glaub ich zumindest 🙄



  • ups 😕

    int findFirstBitSet(unsigned int i){ 
    statt 
    int findFirstBitSet(int i){
    


  • Ja das scheint jetzt zu funktionieren, aber jetzt geht die Eingabe wieder nicht mehr, also der erkennt richtig a = b99 und b = 13 aber als result gibt er mir dann b8a aus ...

    char buffera[40], bufferb[40];
    	unsigned int a=0, b=0;
        unsigned int firstBit = 0x80000000;
    
        unsigned int c;
    
        int firstBitOfA = findFirstBitSet(a);
        int firstBitOfB = findFirstBitSet(b);
        int dataBits = firstBitOfA - firstBitOfB;
        int bShift = 31-firstBitOfB; 
    
    	printf ("\n\nBitte geben Sie das Sendepolynom ein: ");
    	scanf("%32s", &buffera);
        getchar();
    	a=strtol (buffera, NULL, 2);
    	printf ("a = %x", a);
    
    	printf ("\nBitte geben Sie das Generatorpolynom ein: ");
    	scanf("%32s", &bufferb);
        getchar();
    	b=strtol (bufferb, NULL, 2);
    	printf ("b = %x", b);
    


  • versuch mal z.7 - z.10 inclusive unter z.22



  • Ja.. es funktioniert.. unglaublich..
    Danke 😃



  • @noobLolo
    Hast du vielleicht ICQ?
    Es wäre cool, wenn du mich mal adden würdest. Ich will dich nur noch bissi ausfragen und dann lass ich dich endlich in Ruhe 🙂
    Meine ICQ-Nr.: xxxxxxxxx

    Edit:
    Ah nee ich hab jetzt alles kapiert 😉 Ich bin jetzt fertig..
    Danke


Anmelden zum Antworten