![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| wowka19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 30.11.2011 Репутация: нет Всего: нет |
В итоге TEST.bin весит 4 байта, что есть норма так как в моем случае sizeof(unsigned int) == 4. Открываю файл в HEX-редакторе и вижу: "0d 00", т.е. всего два байта вместо четырех, причем неверно расположенных, ибо 13 == 00 0d. Я же ожидал увидеть "00 00 00 0d". Что не так? Это сообщение отредактировал(а) wowka19 - 14.12.2014, 21:27 |
|||
|
||||
| vol4ek |
|
|||
![]() конь в пальто ![]() ![]() Профиль Группа: Участник Сообщений: 304 Регистрация: 1.5.2011 Где: Минск Репутация: 0 Всего: 0 |
посмотрел файл в WinHEX - 0D 00 00 00
|
|||
|
||||
| wowka19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 30.11.2011 Репутация: нет Всего: нет |
Но "0D 00 00 00" это не 13, а 218103808. Поэтому должно быть "00 00 00 0D". Вопрос остался.
Получается я как-то неправильно кладу uint, но почему? и как правильно? Вообще, попрошу посоветовать какую-нибудь статью на эту тему - как правильно упаковывать данные в бинарники. Это сообщение отредактировал(а) wowka19 - 14.12.2014, 22:13 |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
||||
|
||||
| tzirechnoy |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 2 Всего: 16 |
Ещё я посоветую прочитать и понять вот это: http://commandcenter.blogspot.ru/2012/04/b...er-fallacy.html
|
|||
|
||||
| Vasya |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 5.7.2003 Репутация: нет Всего: нет |
Так, к слову, на платформах интел, эсли не ошибаюсь, чтение идет задом на перед, сначала читаются последние байты, потом первые. Т.е. 0D 00 00 00 после прочтения преобразуются в 00 00 00 DD.
Это сообщение отредактировал(а) Vasya - 17.12.2014, 22:34 |
|||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
Нет. На "платформах интел" 0D 00 00 00 и есть 0x0000000D безо всяких преобразований (до чтения либо после). -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| Vasya |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 5.7.2003 Репутация: нет Всего: нет |
ок, я неправильно выразился, ничего не преобразуется, просто при записи сначала записываются младшие байты, затем старшие, поэтому 0d 00 00 00 надо трактовать как 00 00 00 0d. |
|||
|
||||
| wowka19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 30.11.2011 Репутация: нет Всего: нет |
tzirechnoy, а на русском есть подобная статья?
зы: не ругайте за незнание английского - сам знаю. |
|||
|
||||
| sQu1rr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 597 Регистрация: 11.11.2008 Где: london Репутация: 3 Всего: 13 |
Что-то приблизительно похожее есть тут. http://habrahabr.ru/post/233245/ А так гуглите "Порядок байт" |
|||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
А чем Вики не угодила? Ссылку дал baldina -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| wowka19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 30.11.2011 Репутация: нет Всего: нет |
Получил CRC32 в (UNSIGNED LONG). Как мне привести UNSIGNED LONG к 4 CHAR ?
Добавлено через 11 минут и 49 секунд Ответ:
Вообще я так и не понял: зачем нужен обратный(прямой) порядок байт. Почему не используют один вариант. Не смогли договориться? |
|||
|
||||
| konshyn |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 295 Регистрация: 19.9.2013 Репутация: нет Всего: нет |
Можно сказать и так Из Вики:
-------------------- «Потому что ценность акта действия в этой стране возрастает в несколько раз». |
||||
|
|||||
| sQu1rr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 597 Регистрация: 11.11.2008 Где: london Репутация: 3 Всего: 13 |
||||
|
||||
| konshyn |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 295 Регистрация: 19.9.2013 Репутация: нет Всего: нет |
Если говорить именно о типе unsigned long, то в стандарте С сказано, что значение должно быть минимум [0; 2^32 -1]. Не встречал ни одной платформы, где использовалось бы значение больше. А меньше не может быть, т.к. стандарт обязывает. А вообще, Вы правы: лучше использовать такие типы, как uint8_t, ..., uint32_t, uint64_t -------------------- «Потому что ценность акта действия в этой стране возрастает в несколько раз». |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |