Converting number to byte array

前端 未结 3 613
别跟我提以往
别跟我提以往 2021-01-06 16:50

Hi I have a base 10 number for example 3198, and the hex representation is 0x0C7E

How do I convert that number to hex and put that hex value in a byte array in the f

相关标签:
3条回答
  • 2021-01-06 17:29

    Maybe this will work ?

    uint32_t x = 0x0C7E;
    uint8_t bytes[3];
    
    bytes[0] = (x >> 0)  & 0xFF;
    bytes[1] = (x >> 8)  & 0xFF;
    bytes[2] = (x >> 16) & 0xFF;
    
    
    /* Go back. */
    x = (bytes[2] << 16) | (bytes[1] << 8) | (bytes[0] << 0);
    
    0 讨论(0)
  • 2021-01-06 17:53

    Number is already a continuous memory block - no need to convert it to yet ANOTHER array ! Just fetch separate bytes by using pointer arithmetic:

    EDIT: Edited to be endianness-independent

    #define FAST_ABS(x) ((x ^ (x>>31)) - (x>>31))
    
    int is_big_endian(void)
    {
        union {
            uint32_t i;
            char c[4];
        } bint = {0x01020304};
    
        return bint.c[0] == 1; 
    }    
    
    uint32_t num = 0xAABBCCDD;
    uint32_t N = is_big_endian() * 3;
    
    printf("first byte 0x%02X\n"
           "second byte 0x%02X\n"
           "third byte 0x%02X\n"
           "fourth byte 0x%02X\n",
           ((unsigned char *) &num)[FAST_ABS(3 - N)],
          ((unsigned char *) &num)[FAST_ABS(2 - N)],
          ((unsigned char *) &num)[FAST_ABS(1 - N)],
          ((unsigned char *) &num)[FAST_ABS(0 - N)]
           );
    
    0 讨论(0)
  • 2021-01-06 17:56
    #include <stdio.h>
    
    union uint32_value {
        unsigned int value;
    
        struct little_endian {
            unsigned char fou;
            unsigned char thi;
            unsigned char sec;
            unsigned char fir;
        } le;
    
        struct big_endian {
            unsigned char fir;
            unsigned char sec;
            unsigned char thi;
            unsigned char fou;
        } be;
    };
    
    int main(void)
    {
        union uint32_value foo;
        foo.value = 3198;
        printf("%02x %02x %02x %02x\n", foo.le.fir, foo.le.sec, foo.le.thi, foo.le.fou);
    
        return 0;
    }
    
    0 讨论(0)
提交回复
热议问题