3 / 3 / 2
Регистрация: 21.02.2015
Сообщений: 77
|
||||||
1 | ||||||
Неверный вывод байтов int-а при приведении его до char*02.02.2017, 17:56. Показов 1361. Ответов 8
Метки нет (Все метки)
0
|
02.02.2017, 17:56 | |
Ответы с готовыми решениями:
8
Входная строка имела неверный формат при приведении к типу Double При явном приведении к int получаются числа, но явно не те, что должны быть Ошибка: cannot convert 'int (*)[50]' to 'int*' for argument '1' to 'void vvod2m(int*, int*, int*, char)'Х2 Реализация функции char *padl(const char *string, int len, int c=' ') |
Неэпический
|
|
02.02.2017, 18:00 | 3 |
Сообщение было отмечено ACTIONFENIX как решение
Решение
1
|
3 / 3 / 2
Регистрация: 21.02.2015
Сообщений: 77
|
|
02.02.2017, 18:20 [ТС] | 4 |
MrGluck, MrGluck, суть не в этом. Мне нужно было получить такое представление числа, которое используется в двоичных файлах.
Добавлено через 8 минут Croessmah, все же это не обьясняет, почему одно и то же число выводится с разным порядком следования байтов. Я не использую ни сеть, ничего такого.
0
|
02.02.2017, 21:17 | 5 |
Сеть тут не при чём. Число хранится в памяти в четырёх байтах. На intele'е оно хранится в little-endian. Если ты этот же исходник скомпилишь на sparc'е (big-endian машина), то обе печати совпадут
0
|
Вездепух
11696 / 6375 / 1724
Регистрация: 18.10.2014
Сообщений: 16,076
|
|
02.02.2017, 21:31 | 6 |
Наборот, это мы привыкли по жизни писать числа "в обратном порядке", то есть вес разряда в нашей повседневной записи числа в любой позиционной системе счисления возрастает справа-налево (!). И это при том, что читать и писать мы привыкли слева-направо. Кстати, именно по этой причине вы сами в вашу же функцию печати значения
val запрограммировали "переворачивание" вывода: cout << !!(val & (1 << (sizeof(val) * 8 - i - 1))); А программа ваша как раз таки все выводит байты представления числа во вполне естественном порядке: байты числа в памяти на little-endian машине располагаются в порядке возрастания их значимости. Чем выше адрес байта - тем выше значимость байта. Это вполне естестаенный и логичный порядок байтов. Именно этот порядок вы и наблюдаете в вашем выводе.
3
|
1550 / 875 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
|
03.02.2017, 17:50 | 7 |
А если вспомнить что цифры называются арабскими и в каком направлении пишут/читают арабы, то все встает на свои места.
0
|
1550 / 875 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
|
03.02.2017, 18:21 | 9 |
Дык это холиварный вопрос - "какой порядок другой, а какой правильный?".
Есть же еще middle-endian. Там вообще с порядком весело.
0
|
03.02.2017, 18:21 | |
03.02.2017, 18:21 | |
Помогаю со студенческими работами здесь
9
Error C2040:strnset_2:"char *(char *,int,unsigned int)" отличается по уровням косвенного обращения от "int ()" как осуществить приведение типов....(int) char ; (char) int; Вывод адреса для типов int* и char* Форматирование строк, char to int & int to char Как превести из char* в int и наоборот из int в char*? Неверный результат при преобразования типов данных static_cast<int>(double) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |