C leggere i byte che rappresentano un int

di il
15 risposte

15 Risposte - Pagina 2

  • Re: C leggere i byte che rappresentano un int

    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.
Devi accedere o registrarti per scrivere nel forum
15 risposte