![]() |
|
|
![]()
|
|
| Dreamer_0x01 |
|
|||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: 9 Всего: 12 |
Где выставить способ хранения данных big-endian или little-endian?
Помню, где-то это видел, но никак не могу найти. -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
По крайней мере, в свойствах проекта я этого тоже не видела. Может, это макросы препроцессора - вроде можно выставить компиляцию для разных процессоров.
А зачем тебе? Ведь тогда на Интеле не будет работать. Если же речь идет о передаче данных куда-либо, то проще конвертировать руками. Хочешь код удобного класса? -------------------- ... |
|||
|
||||
| Dreamer_0x01 |
|
|||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: 9 Всего: 12 |
Ну скажем так, сконвертировать я смогу без проблем. (Чай байтики переставлять местами умею, так как контроллеры програмлю ;) )
Определить, установлено то или другое - тоже смогу, топо проанализировав любое 16-разрядное число и адреса, по которым находятся его байты. В класс завернуть...хм, можно конечно. Но вроде бы я видел в опциях такую настройку где-то. К тому же..не знаю, как я этого добился, но у меня вижуал студио 2003 все время данные компилирует в big-endian. 6 студия тоже в биг-ендиан компилировала. А вот дома стоит 2003 - так она в little-endian компилирует. И все было бы хорошо, если бы мне не надо было везде использовать либо только big-endian, либо только little-endian. (так как я данные по каналам связи отправляю побайтно, а сами данные объединены в структуры известного мне формата). У меня есть два различных прибора, в одном из которых программа написана под одним компилятором, в другом - под другим. Соответственно, у одного компилятора вседа только little-endian, у другого - только big-endian. Я соответственно и сделал - при общении с одним прибором данные пихаю напрямую,с другим меняю местами байтики. Все было хорошо, пока я не скопмилировал проект на другом компе - оказалось, там студия вместо привычного мне big-endian стала лепить код в little-endian. Пришлось вставить/выкинуть конвертацию в нужные места программы, но это я так понимаю не выход. А что ты хотела предложить сделать? -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
| SergeCpp |
|
||||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 955 Регистрация: 8.8.2005 Где: At Home Репутация: 5 Всего: 124 |
Я бы сначала сравнил записи в реестре (те, что относятся к VS) Если необходимые различия не определились, то сравнил бы файлы установки, проектов, etc... Так как в Вашем случае есть две VS 2003, компилирующие по-разному, то где-то это отражено ведь?.. RegMon, в частности, помочь может. |
||||
|
|||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Да я как раз тоже за то, чтобы программа делала внутри себя одно и то же, желательно предсказуемо, а конвертировала данные на выходе, в строго заданных точках. Мне кажется, если пишем для PC, то внутри все должно быть little-endian - естественнее как-то. Если ты как-то получил байты наоборот, значит, это возможно. Поддерживаю предложение SergeCpp: ройся в реестре... что тут еще скажешь... Найдешь - напиши. А предлагала я обертку, которая прозрачна для кода, без всяких этих "конверт-сюда", потом "конверт-туда", которые логику засирают... -------------------- ... |
|||
|
||||
| Dreamer_0x01 |
|
|||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: 9 Всего: 12 |
Ну так предложи, я в нетерпении ;) Хм..копаться в реестре...да на двух компах...находящихся друг от друга на расстоянии 20 минут езды на машине...сравнивать их реестры...Уффф, это жестко ;) Можно конечно реестр в файл сохранить,но чем его потом открыть? И все таки. Несмотря на то, что данное неудобство обходится при помощи конвертации или иного способа, который предложила Earnest, хотелось бы найти эту опцию. Дело в том, что я еще и в полемику с преподавателем вступил, так как он утверждает,что ни один компилятор вообще big-endian не поддерживает. Для двух компиляторов под микроконтроллеры я уже ему привел примеры с красивыми дампами памяти в виде и big-endian,и little-endian, теперь хочется и для Вижуал Студио примерчик сгенерировать ;) -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
| SergeCpp |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 955 Регистрация: 8.8.2005 Где: At Home Репутация: 5 Всего: 124 |
Превосходный комплект из трёх крошечных программ для
Использую уже около 7 лет — с 1999 Это не REGEDIT... Бесплатна, но больше не обновляется автором (адрес автора недоступен) Вот тут размещено тоже... |
|||
|
||||
| Dreamer_0x01 |
|
|||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: 9 Всего: 12 |
Э...а разве формат реестра WinXP,Win9X и Win2000 не отличается?
-------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
| SergeCpp |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 955 Регистрация: 8.8.2005 Где: At Home Репутация: 5 Всего: 124 |
Программа работает с данными, полученными посредством соответствующих вызовов API, скрывающих внутреннее устройство файлов реестра...
P.S. На картинке как раз реестр Win2K, что видно по S-1-5-21-.... Это специфический ключ NT-based систем... Это сообщение отредактировал(а) SergeCpp - 27.10.2006, 10:06 |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Вот класс, который преобразует long. Просто заводишь поля данного типа, где надо, и работаешь с ними как с обычными целыми. Операцию SwapBytes можно и поэффективнее реализовать, если надо (мне - нет). Можно также добавить арифметических операций.
-------------------- ... |
|||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 7 Всего: 92 |
Исправить фамилию непосредственно на "Орёл" - и буду я |
|||
|
||||
| Dreamer_0x01 |
|
|||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: 9 Всего: 12 |
Earnest,
так а как мне определить, является ли значение. подставляемой в конструктор такого класса, записанным в нужном мне виде, или нет? И как использование такой конструкции решит проблему различной компиляции проекта на разных машинах? -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
| Earnest |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Никак, конечно: откуда машине знать, что за число ты ей даешь. Оно ведь и сзаду наперед - тоже вполне законное число получается. Разве что у тебя есть ограничения сверху: тогда сзаду наперед должно что-то большое получится... но тоже не факт.
Тоже никак. Это просто удобная обертка для передачи данных на машину с другим порядком байтов. Предполагается, что одна и та же программа везде должна компилироваться одинаково. Как тебе вернуть к нормальному виду компилятор, который big-endian рисует - не знаю, разве что переустановить... -------------------- ... |
||||
|
|||||
| Dreamer_0x01 |
|
|||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: 9 Всего: 12 |
Короче, надо на этапе инициализации контрольный пример смотреть.
например что-то типа такого:
И уже значение этого параметра подставлять в класс, где определять, пользоваться перестановкой или нет ;) -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |