| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Битовые поля |
| Автор: Neox_GeForce 28.3.2010, 15:47 | ||
Подскажите , какая максимальная длина битового поля? А то я пишу
пишет ошибку что битовое поле завелико. |
| Автор: W4FhLF 28.3.2010, 15:53 | ||
А ты сам посмотри:
|
| Автор: azesmcar 28.3.2010, 15:56 | ||||
Какой компилятор и платформа? У меня на gcc и Visual Studio 2008 никаких ошибок. Обычно unsigned long это 4 байта. Интересно, что Visual Studio выдал ошибку на коде
gcc выдает только warning. Добавлено @ 16:00 а почему -1? |
| Автор: Neox_GeForce 28.3.2010, 16:22 |
31 тоесть 32 бита влазит в unsigned long Borland C++, Windows |
| Автор: azesmcar 28.3.2010, 16:23 |
Консольная версия? |
| Автор: Neox_GeForce 28.3.2010, 16:24 |
| да |
| Автор: azesmcar 28.3.2010, 16:24 |
хотя если выводит 31 то ошибка компилятора, советую перейти на что нибудь нормальное, от борланда можно ожидать чего угодно. |
| Автор: azesmcar 28.3.2010, 16:27 |
ну это понятно Твой компилятор давно устарел, смени на что нибудь поновее, gcc, Visual Studio... |
| Автор: Neox_GeForce 28.3.2010, 16:28 | ||
И ошибке 2 в одной строчке
странно я ведь пишу unsigned без знаковое. Добавлено через 3 минуты и 18 секунд щас перекомпилирую и отпишу. |
| Автор: SABROG 28.3.2010, 16:48 |
| Вопрос в догонку. Нормально ли компилятор работает с битовыми полями на разных архитектурах с другим порядком байт, endianess? Если я правильно понимаю, то проблема может возникнуть только если данные были получены из внешнего источника, файл на диске, пакет по сети? |
| Автор: mes 28.3.2010, 17:14 | ||
работает то нормально, но порядок байт "не учитывает". |
| Автор: Neox_GeForce 28.3.2010, 17:14 | ||||
ошибки компиляции какие-то
|
| Автор: azesmcar 28.3.2010, 17:21 | ||||||||
цитирую продолжение
Добавлено через 1 минуту и 42 секунды о чем речь? какой компилятор? все тот же? Тогда что изменились? Если сменил на нормальный, то в нормальном компиляторе нет функций clrscr() и даже заголовочных файлов
может не быть, правильно будет
а conio.h в библиотеке C++ не существует. |
| Автор: Neox_GeForce 28.3.2010, 17:29 |
| мне на С надо. |
| Автор: mes 28.3.2010, 18:07 | ||||
в С нужно явно указывать что тип являются структурой, т.е
|
| Автор: SABROG 28.3.2010, 18:53 | ||
То есть при соблюдении следующих условий проблем никогда не возникнет? : - объект создается динамически программой и используется только внутри этой программы - объект существует пока программа работает - объект не должен передаваться между разными модулями программы (.dll, .exe и т.п.), если модули могли быть написаны на разных языках программирования или собраны разными компиляторами, а также сохраняться на диск или передаваться во внешний источник - программа должна быть пересобрана заново на новой архитектуре, перенос исполнимого файла между компьютерами не допускается |
| Автор: mes 28.3.2010, 20:19 | ||||||
SABROG, не слишком ли много условностей ? к тому же по большей мере не относящейся к так называемой проблеме, о которой ведете речь..
это вообше каким боком тут ? а это ?
слишком далеко копнули, "проблема" выше .. получить проблему можно легко, не имея ни модулей, ни других языков, просто приведя многобайтовое значение к битовой структуре. Если предназначен для чтения той же самой программой, то никаких проблем..
Ну а битовые поля тут при чем ? |
| Автор: SABROG 28.3.2010, 22:41 | ||
В той же программе? То есть я создал объект, затем сделал memcpy как для unsigned char* по другому адресу и получил косяк при обратном преобразовании? |
| Автор: mes 29.3.2010, 09:05 |
имелись ввиду "длинные" значения, такие как short, int.. с зависимым порядком байт адрес не причем, ну и само битовое представление тоже косвенно.. важен привод к другому типу, например А а = *(А*) &i; // i - int, sizeof(a) == sizeof (i); то результат неопределен (будет зависеть от платформы) хотя на приведенную конструкцию компилятор должен закричать, но от memcpy уже не спасет. при обратном преобразовании, если были учтены размеры и не было потери данных, будет все в порядке. |