Имеет ли С ++ std :: hex обратный порядок байтов? (печать десятичного числа как шестнадцатеричного) - PullRequest
1 голос
/ 05 августа 2020

У меня проблемы с пониманием следующего кода C ++:

std::cout << std::hex << 61183 << std::endl; // prints eeff

Я работаю на машине с прямым порядком байтов (Intel x86-64), и я хотел понять, в битах и На уровне байтов, как получается этот результат, поэтому я написал следующую таблицу для архитектуры наименее значимых битов.

введите описание изображения здесь

Как видите, я ожидал, что вывод строки кода будет FFEE вместо EEFF. Так что я, должно быть, что-то упустил при изготовлении этого стола, но я действительно не понимаю, что. Влияет ли std::hex на порядок байтов компьютера?

Ответы [ 2 ]

6 голосов
/ 05 августа 2020

Порядок байтов - это порядок хранения чисел в памяти с байтовой адресацией.

С другой стороны, std::hex производит шестнадцатеричный текст.

0x1000 * 14 + 0x100 * 14 + 0x10 * 15 + 0x1 * 15 == 61183, поэтому 61183 - это EEFF в шестнадцатеричной системе.

Это не зависит от порядка байтов.

1 голос
/ 05 августа 2020

61183 в шестнадцатеричном формате - это EEFF.

Порядок байтов связан с тем, как некоторые числовые значения хранятся в памяти, а не с тем, как должны быть определены преобразования из одного основания в другой. Следовательно, вывод std::hex не зависит от порядка байтов, хотя он может быть фактором внутренних вычислений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...