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.