Как переставить байты местами в языке Си?

Для перестановки байтов местами в языке C можно использовать операции побитового сдвига и побитового ИЛИ. Допустим, у нас есть число типа unsigned int, в котором хранятся данные. Для простоты предположим, что это 4-байтовое число.

Алгоритм для перестановки байтов выглядит следующим образом:

1. Создайте переменную типа unsigned int для хранения переставленного значения.
2. Используйте операцию побитового ИЛИ для получения значений байтов из исходного числа и их последующего сдвига на соответствующее количество битов.
3. Используйте операцию побитового сдвига влево для сдвига полученных значений байтов на нужное количество битов.
4. Используйте операцию побитового ИЛИ для слияния сдвинутых значений байтов в новом числе.
5. Новое число будет содержать переставленные байты.

Пример кода на языке C:

#include <stdio.h>

unsigned int swapBytes(unsigned int num) {
    unsigned int result = 0;
    
    // получение значений байтов и сдвиг влево
    result |= (num & 0xFF) << 24;
    result |= (num & 0xFF00) << 8;
    result |= (num & 0xFF0000) >> 8;
    result |= (num & 0xFF000000) >> 24;
    
    return result;
}

int main() {
    unsigned int num = 0x12345678;
    unsigned int swappedNum = swapBytes(num);
    
    printf("Исходное число: 0x%Xn", num);
    printf("Переставленное число: 0x%Xn", swappedNum);
    
    return 0;
}

В данном примере функция swapBytes принимает исходное число num, переставляет его байты и возвращает новое число с переставленными байтами. В функции main пример использования функции, где мы инициализируем переменную num значением 0x12345678, вызываем функцию swapBytes для перестановки байтов и выводим исходное и полученное числа в шестнадцатеричном формате.