Citar
//Los resultados de lo que viene a continuacion no me caben en la cabeza:
unsigned char *p1 = (unsigned char *)&x; // entiendo que p y p1 apuntan a lo que hay en &x, osea: 511
cout << "byte 1:" << (int)*(p1+0) << endl; // p1 es multiplicado por ¿int? ¿que número?
No, no es una multiplicación. Eso quiere decir algo como "el byte
apuntado por (p1+0) y convertido a int".
Si te es mas claro, sería algo como
unsigned char ValorByte = *(p1+0);
int ValorEntero = (int)ValorByte;
cout <<"byte 1:"<<ValorEntero<<endl;
Saludillos
Citarunsigned char *p1 = (unsigned char *)&x; // entiendo que p y p1 apuntan a lo que hay en &x, osea: 511
p1 es un puntero
unsigned char unsigned char es de 1Byte, es decir que cuando leas el valor que apunta, leeras 255, que es lo que hay en el Byte que apunta &x, la variable x es de 4Bytes (en compiladores antiguos de 2Bytes), el primer Byte contiene 255 (0xff), el segundo 1(0x1) y los otros 2 Bytes estan a 0.
Citarcout << "byte 1:" << (int)*(p1+0) << endl;
HgH, entiende que coge el puntero como un puntero de int, yo creo que es un error de sintaxis, y se deberia escrivir
(int*), pero teniendo en cuenta que quieres leer el contenido de un Byte podrias dejar solo el
*, en realidad compilado se multiplica ..... pero por un tipo y no un valor..... por eso creo que es error de sintaxis, pon (int*) o si quieres leer solo 1 Byte deja solo el *.
Saludotes.