Вступление
Как мы знаем Сетевой байт Заказать использовать Большой Endian и x86 Семейные процессоры используют Маленький Endian Отказ Итак, нам нужно преобразовать их.
Реализация
Здесь это одна из реализации. Идея состоит в том, что мы используем двоичное управление для перестройки порядка байта.
auto little_to_big(int32_t num) -> int32_t { return (num >> 24 & 0x000000FF) ^ (num >> 8 & 0x0000FF00) ^ (num << 8 & 0x00FF0000) ^ (num << 24 & 0xFF000000); } auto m = int32_t(0x12345678); auto n = little_to_big(m);
Тестирование
В GDB мы можем легко наблюдать за заказ байта. Установите точку перерыва, запустите ее, назначьте формат и распечатайте его.
(gdb) break main (gdb) run (gdb) next (gdb) next (gdb) p/x m (gdb) p/x n
Мы можем использовать Python с GDB и сделать тестирование более гибким.
import gdb if __name__ == '__main__': gdb.execute('break main') gdb.execute('run') gdb.execute('next') gdb.execute('next') gdb.execute('p/x m') gdb.execute('p/x n')
И тогда мы можем сделать немного рефакторинга кода.
import gdb def config(): cmd = ['break main', 'run']; list(map(gdb.execute, cmd)) def trace(): cmd = ['next', 'next', 'p/x m', 'p/x n'] list(map(gdb.execute, cmd)) if __name__ == '__main__': config() trace()
В конце концов
Полный код – здесь Отказ
Пожалуйста, следуйте моим Twitter, Github, Instagram и dev.to
- https://twitter.com/_gapry
- https://github.com/gapry/
- https://www.instagram.com/_gapry/
- https://dev.to/gapry
Спасибо за чтение, увидимся в следующий раз.
использованная литература
Оригинал: “https://dev.to/gapry/convert-little-endian-to-big-endian-pgg”