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.