Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос про настройки компиляции, в Visual Studio 
:(
    Опции темы
Dreamer_0x01
Дата 25.10.2006, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Терминатор
**


Профиль
Группа: Участник
Сообщений: 780
Регистрация: 14.4.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 12



Где выставить способ хранения данных big-endian или little-endian?
Помню, где-то это видел, но никак не могу найти.


--------------------
Нет ничего невозможного. Есть цели, и есть время и силы на их достижение.
PM ICQ   Вверх
Earnest
Дата 26.10.2006, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



По крайней мере, в свойствах проекта я этого тоже не видела. Может, это макросы препроцессора - вроде можно выставить компиляцию для разных процессоров.
А зачем тебе? Ведь тогда на Интеле не будет работать. Если же речь идет о передаче данных куда-либо, то проще конвертировать руками. Хочешь код удобного класса?


--------------------
...
PM   Вверх
Dreamer_0x01
Дата 26.10.2006, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Терминатор
**


Профиль
Группа: Участник
Сообщений: 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. Пришлось вставить/выкинуть конвертацию в нужные места программы, но это я так понимаю не выход.

А что ты хотела предложить сделать?



--------------------
Нет ничего невозможного. Есть цели, и есть время и силы на их достижение.
PM ICQ   Вверх
SergeCpp
Дата 26.10.2006, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


 
**


Профиль
Группа: Участник
Сообщений: 955
Регистрация: 8.8.2005
Где: At Home

Репутация: 5
Всего: 124



Цитата(Dreamer_0x01 @  26.10.2006,  15:58 Найти цитируемый пост)
но у меня вижуал студио 2003 все время данные компилирует в big-endian

Цитата(Dreamer_0x01 @  26.10.2006,  15:58 Найти цитируемый пост)
А вот дома стоит 2003 - так она в little-endian компилирует


Я бы сначала сравнил записи в реестре (те, что относятся к VS)

Если необходимые различия не определились, то сравнил бы файлы установки, проектов, etc...

Так как в Вашем случае есть две VS 2003, компилирующие по-разному, то где-то это отражено ведь?..

RegMon, в частности, помочь может.

PM MAIL WWW ICQ   Вверх
Earnest
Дата 26.10.2006, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Цитата(Dreamer_0x01 @  26.10.2006,  13:58 Найти цитируемый пост)
А что ты хотела предложить сделать?

Да я как раз тоже за то, чтобы программа делала внутри себя одно и то же, желательно предсказуемо, а конвертировала данные на выходе, в строго заданных точках. Мне кажется, если пишем для PC, то внутри все должно быть little-endian - естественнее как-то.
Если ты как-то получил байты наоборот, значит, это возможно. Поддерживаю предложение SergeCpp: ройся в реестре... что тут еще скажешь... Найдешь - напиши. smile 
А предлагала я обертку, которая прозрачна для кода, без всяких этих "конверт-сюда", потом "конверт-туда", которые логику засирают...


--------------------
...
PM   Вверх
Dreamer_0x01
Дата 27.10.2006, 07:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Терминатор
**


Профиль
Группа: Участник
Сообщений: 780
Регистрация: 14.4.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 12



Цитата(Earnest @  26.10.2006,  17:01 Найти цитируемый пост)
А предлагала я обертку, которая прозрачна для кода, без всяких этих "конверт-сюда", потом "конверт-туда", которые логику засирают...


Ну так предложи, я в нетерпении ;)


Хм..копаться в реестре...да на двух компах...находящихся друг от друга на расстоянии 20 минут езды на машине...сравнивать их реестры...Уффф, это жестко ;)
Можно конечно реестр в файл сохранить,но чем его потом открыть?

И все таки. Несмотря на то, что данное неудобство обходится при помощи конвертации или иного способа, который предложила Earnest, хотелось бы найти эту опцию.
Дело в том, что я еще и в полемику с преподавателем вступил, так как он утверждает,что ни один компилятор вообще big-endian не поддерживает. Для двух компиляторов под микроконтроллеры я уже ему привел примеры с красивыми дампами памяти в виде и big-endian,и little-endian, теперь хочется и для Вижуал Студио примерчик сгенерировать ;)




--------------------
Нет ничего невозможного. Есть цели, и есть время и силы на их достижение.
PM ICQ   Вверх
SergeCpp
Дата 27.10.2006, 08:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


 
**


Профиль
Группа: Участник
Сообщений: 955
Регистрация: 8.8.2005
Где: At Home

Репутация: 5
Всего: 124



Цитата(Dreamer_0x01 @  27.10.2006,  10:37 Найти цитируемый пост)
Можно конечно реестр в файл сохранить,но чем его потом открыть?

Превосходный комплект из трёх крошечных программ для
  • создания снимков реестра
  • сравнения созданных снимков
  • просмотра и редактирования снимков и результатов сравнения

Использую уже около 7 лет — с 1999

user posted image
Это не REGEDIT...

Бесплатна, но больше не обновляется автором (адрес автора недоступен)

user posted image

Вот тут размещено тоже...

PM MAIL WWW ICQ   Вверх
Dreamer_0x01
Дата 27.10.2006, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Терминатор
**


Профиль
Группа: Участник
Сообщений: 780
Регистрация: 14.4.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 12



Э...а разве формат реестра WinXP,Win9X и Win2000 не отличается?


--------------------
Нет ничего невозможного. Есть цели, и есть время и силы на их достижение.
PM ICQ   Вверх
SergeCpp
Дата 27.10.2006, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


 
**


Профиль
Группа: Участник
Сообщений: 955
Регистрация: 8.8.2005
Где: At Home

Репутация: 5
Всего: 124



Программа работает с данными, полученными посредством соответствующих вызовов API, скрывающих внутреннее устройство файлов реестра...

P.S. На картинке как раз реестр Win2K, что видно по S-1-5-21-.... Это специфический ключ NT-based систем...


Это сообщение отредактировал(а) SergeCpp - 27.10.2006, 10:06
PM MAIL WWW ICQ   Вверх
Earnest
Дата 27.10.2006, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Цитата(Dreamer_0x01 @  27.10.2006,  08:37 Найти цитируемый пост)
Ну так предложи, я в нетерпении ;)

Вот класс, который преобразует long. 
Просто заводишь поля данного типа, где надо, и работаешь с ними как с обычными целыми.
Операцию SwapBytes можно и поэффективнее реализовать, если надо (мне - нет).
Можно также добавить арифметических операций.

Код

// целое в порядке Motorola
class CIntegerM 
{                
public:
    CIntegerM (long=0);
    
    operator long();

    CIntegerM& operator = (long val);
   CIntegerM& operator +=(long val);

private:
    static long SwapBytes (long val);

private:
    long m_val;
};

inline CIntegerM::CIntegerM (long v)
{
    m_val = SwapBytes (v);
}

inline CIntegerM::operator long()    
{
    return SwapBytes (m_val);
}

inline CIntegerM& CIntegerM::operator = (long val)    
{
    m_val = SwapBytes(val);
    return *this;
}

inline CIntegerM& CIntegerM::operator += (long val)   
{
   m_val = SwapBytes (SwapBytes (m_val) + val);
    return *this;
}

inline long CIntegerM::SwapBytes (long val) 
{
    // Motorola <-> Intel
    union TRANSFORM
    {
        long l;
        char b[4];
    };

    TRANSFORM* pVal = (TRANSFORM*)(&val);
    std::swap (pVal->b[0], pVal->b[3]);
    std::swap (pVal->b[1], pVal->b[2]);
    return val;
}



--------------------
...
PM   Вверх
Любитель
Дата 28.10.2006, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 7
Всего: 92



 smile не удержался.
Цитата

Copuright © Alexander Orlov

Исправить фамилию непосредственно на "Орёл" - и буду я  smile Может енто я спьяну когда-нибудь написал...


--------------------
PM MAIL ICQ Skype   Вверх
Dreamer_0x01
Дата 28.10.2006, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Терминатор
**


Профиль
Группа: Участник
Сообщений: 780
Регистрация: 14.4.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 12



Earnest, 
так а как мне определить, является ли значение. подставляемой в конструктор такого класса, записанным в нужном мне виде, или нет?

И как использование такой конструкции решит проблему различной компиляции проекта на разных машинах?


--------------------
Нет ничего невозможного. Есть цели, и есть время и силы на их достижение.
PM ICQ   Вверх
Earnest
Дата 30.10.2006, 09:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Цитата(Dreamer_0x01 @  28.10.2006,  18:08 Найти цитируемый пост)
так а как мне определить, является ли значение. подставляемой в конструктор такого класса

Никак, конечно: откуда машине знать, что за число ты ей даешь. Оно ведь и сзаду наперед - тоже вполне законное число получается. Разве что у тебя есть ограничения сверху: тогда сзаду наперед должно что-то большое получится... но тоже не факт.

Цитата(Dreamer_0x01 @  28.10.2006,  18:08 Найти цитируемый пост)
И как использование такой конструкции решит проблему различной компиляции проекта на разных машинах? 

Тоже никак. Это просто удобная обертка для передачи данных на машину с другим порядком байтов.
Предполагается, что одна и та же программа везде должна компилироваться одинаково. Как тебе вернуть к нормальному виду компилятор, который big-endian рисует -  не знаю, разве что переустановить...



--------------------
...
PM   Вверх
Dreamer_0x01
Дата 30.10.2006, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Терминатор
**


Профиль
Группа: Участник
Сообщений: 780
Регистрация: 14.4.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 12



Короче, надо на этапе инициализации контрольный пример смотреть.
например что-то типа такого:

Код

bool big_endian=false;

unsigned short control_data=0x1122;
unsigned char * p=(unsigned char *)&control_data;

if(*p==0x11)big_endian=true;


И уже значение этого параметра подставлять в класс, где определять, пользоваться перестановкой или нет ;)


--------------------
Нет ничего невозможного. Есть цели, и есть время и силы на их достижение.
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.1083 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.