Void * addrese um genau n bits verschieben?



  • Hallo ich habe folgendes

    PrintField(char fieldType, int fieldOffset, void *bufPtr)
    {
    //fieldtype unitressant
    //field ofsset da drin ist gespeichert wie viele bytes ich bufPtr verschiben will
    //bufPtr ein zeiger auf ein array
    
    	switch(fieldOffset)
    	{
    	case 'i':
    		{
    			printf("%d", *(int *)(bufPtr + fieldOffset));
    			break;
    		}
    	case 'f':
    		{
    

    Nun ich will bufptr genau fieldOffset Bytes Vershieben und dann von dort int Bytes ausdrucken. Aber alle Compiler der welt haben was dagegen. Ich weis wieso. Aber was kann ich tun damit das der Compiler auch versteht?.

    //hab ich vergesen
    printf("%d",(int)*((char *)bufPtr + fieldOffset));
    So get es aber was passiert wenn char in einer maschine nicht 1 byte gross ist. Und gibt es eine besser, cooler, elegante, losung ohne tausent casts un '(' ')' zu benutzen?.



  • Habs nur einmal kurz überflogen, aber bis du sicher, dass es

    switch(fieldOffset)

    heissen soll und nicht

    switch(fieldType) ?

    Übrigens ist es imho vom Standard her vorgegeben, dass ein char genau 1 Byte hat.



  • Char hat immer 1 Byte und Zeigerarithmetik mit void ist nicht erlaubt, daher ist

    (char*)bufPtr + x

    der richtige Weg.


Log in to reply