Weierstrass ha scritto:
Comunque se vuoi leggere la memoria byte a byte o bit a bit, un metodo tipico è questo
#include <stdio.h>
#include <inttypes.h>
typedef struct {
unsigned char b0 : 1;
unsigned char b1 : 1;
unsigned char b2 : 1;
unsigned char b3 : 1;
unsigned char b4 : 1;
unsigned char b5 : 1;
unsigned char b6 : 1;
unsigned char b7 : 1;
} byte;
void print_hex_object(void * obj, size_t size){
unsigned char * ptr = (unsigned char *)obj;
for (size_t i=0; i<size; i++)
printf("%02hhX " , *ptr++);
printf("\n");
}
void print_bin_object(void * obj, size_t size){
byte * ptr = (byte *)obj;
for (size_t i=0; i<size; i++, ptr++){
printf("%hhX" , ptr->b7);
printf("%hhX" , ptr->b6);
printf("%hhX" , ptr->b5);
printf("%hhX" , ptr->b4);
printf("%hhX" , ptr->b3);
printf("%hhX" , ptr->b2);
printf("%hhX" , ptr->b1);
printf("%hhX ", ptr->b0);
}
printf("\n");
}
int main(){
uint32_t x = 0x01020304;
uint64_t y = 0x8182838485868788;
struct {
uint32_t a;
uint64_t b;
} z = {x, y};
char ca[] = "Hello World!";
print_hex_object(&x, sizeof(x));
print_hex_object(&y, sizeof(y));
print_hex_object(&z, sizeof(z));
print_hex_object(&ca, sizeof(ca));
print_bin_object(&x, sizeof(x));
print_bin_object(&y, sizeof(y));
print_bin_object(&z, sizeof(z));
print_bin_object(&ca, sizeof(ca));
return 0;
}
Grazie, esempio gradito, ho iniziato con l'assembly, per tornare dopo anni a gestire i dati grezzi in memoria, devo studiare le principali possibilità offerte dal C.