Search code examples
chexendianness

trying to format hex into little endian in c


So I'm trying to get the sum of the values in a buffer, however, the values need to be rearranged in order to do so. Essentially how do I get C to convert the values in this array:uint16_t inp[] = {0xFF,0x81,0xFD,0x00,0x00,0x00,0x00,0x08,0x00,0x00}; to look like this array: uint16_t buff[] = {0x81FF,0x00FD,0x0000,0x0800,0x0000}


Solution

  • Thanks to @kaylum, I figured it out:

     #include <stdio.h> 
     #include <stdint.h>
     
    uint16_t inp[] = {0xFF,0x81,0xFD,0x00,0x00,0x00,0x00,0x08,0x00,0x00};
    uint16_t buff[sizeof(inp)/2];
    
    
    int main(){
        int sum = 0;
        
        for(int i = 0; i < sizeof(buff);i=i+2){
            buff[i] = ((inp[i+1] | 0x00) << 8) | (inp[i] | 0x00);
            //printf("%.4X\n",buff[i]);
        }
        
        for(int i = 0; i < sizeof(buff);i++){
            sum = sum += buff[i];
        }
        printf("%u\n",sum);
        return 0;
    }