![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Gwendolen |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 119 Регистрация: 5.4.2005 Репутация: нет Всего: 1 |
Мне надо преобразовать массив байт в конкретный тип, при необзодимости заменив порядок байт.
Собственно с изменением порядка байт и преобразованием проблемы нет, она возникла при проверке влезет ли в конкретный тип пришедший диапазон байт:
Где last и first - итераторы . Получается сравнение знакового ptr_diff_t и беззнакового size_t, на что компилятор, собственно, и ругается:
Как правильно исправить код для того чтобы убрать это предупреждение? Это сообщение отредактировал(а) Gwendolen - 17.12.2011, 14:07 --------------------
Наносите пользу и причиняйте добро! |
||||
|
|||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
арифметические операции над указателями/итераторами, дают знаковый тип. sizeof() возвращает беззнаковый. способ решения - какой-то из операндов привести к типу второго. |
|||
|
||||
Gwendolen |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 119 Регистрация: 5.4.2005 Репутация: нет Всего: 1 |
Об этом я и написал, вопрос в том к какому типу приводить(склоняюсь приводить к знаковому). На всех ли платформах корректно преобразование size_t к ptr_diff_t? Это сообщение отредактировал(а) Gwendolen - 17.12.2011, 15:01 --------------------
Наносите пользу и причиняйте добро! |
|||
|
||||
rumit7 |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 16.6.2011 Репутация: 6 Всего: 7 |
Может попробовать так?!
|
||||||
|
|||||||
Gwendolen |
|
||||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 119 Регистрация: 5.4.2005 Репутация: нет Всего: 1 |
Некрасиво, неочевидно, что именно проверяется. Я думал про другой вариант:
Похоже проще просто кастануть тип, ибо размер контейнера никогда не будет соизмерим с размером почти всей доступной памяти, так что можно и не бояться приводить беззнаковый к знаковому(size_t и ptrdiff_t имеют одинаковый размер в байтах):
--------------------
Наносите пользу и причиняйте добро! |
||||||||
|
|||||||||
rumit7 |
|
||||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 16.6.2011 Репутация: 6 Всего: 7 |
Тогда можно так:
Конечно на вкус и цвет, как говорится.. но вот со static_cast, код совсем монстрообразный какой-то, хотя может мне так кажется. Update: Все-таки для данного решения нужно указать, что "iterator" должен относиться к "[U]Random-access iterator category[/U]", так так именно они поддерживают операцию ">=". Это сообщение отредактировал(а) rumit7 - 18.12.2011, 12:32 |
||||||||
|
|||||||||
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
![]() Добавлено через 6 минут и 12 секунд или даже так: size_t size = abs(last - first); чтоб случайно не перепутать местами. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |