vuoi
o PayPal
tutte le volte che vuoi
Il programma scritto in C prende come indirizzo una locazione interna e modifica il suo contenuto invertendo ciascun byte che compone la sua rappresentazione.
Il programma prenderai i bit e li invertira al contrario proprio come nel esempio:
11000000 00100001
il suo valore deve essere modificato in:
00000011 10000100
Il programma fara questo.
#include <stdio.h>
void InvertiByte(unsigned char* p)
{/* funzione ausiliaria: inverte un singolo byte */
unsigned char dest = 0;
int i, bit, maschera = 1;
for (i = 0; i < 8; i++)
{
bit = (*p & maschera) >> i; /* isola il bit i-esimo di *p */
dest = dest | (bit << 7 - i);
maschera = maschera << 1;
}
*p = dest;
}
void InvertiIntero(int* p)
{/* funzione principale: inverte un intero */
int i;
unsigned char* q = (unsigned char *) p;
for (i = 0; i < sizeof(int); i++)
InvertiByte(&q[i]);
}
void StampaMemoria(unsigned char* v, int n)
{ /* funzione ausiliaria (non richiesta) */
unsigned char a;
int i = 0, j;
char stringa_byte[9];
printf("Stampa della memoria in binario\n");
while (i < n)
{ a = v[i];
for (j = 7; j >= 0; j--)
{ if (a % 2 == 1)
stringa_byte[j] = 1;
else
stringa_byte[j] = 0;
a /= 2;
}
stringa_byte[8] = \0;
printf("%s\n",stringa_byte);
i++;
}
}
main()
{
int i;
printf("Valore da invertire in esadecimale : ");
scanf("%x",&i);
StampaMemoria((unsigned char*)&i,sizeof(int));