Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
олъ
1 / 1 / 0
Регистрация: 11.04.2013
Сообщений: 26
1

Какой тип данных можно использовать если мы не знаем, что находится в файле?

20.09.2013, 08:23. Просмотров 1158. Ответов 20
Метки нет (Все метки)

Какой тип данных можно использовать если мы не знаем, что находится в файле?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.09.2013, 08:23
Ответы с готовыми решениями:

Какой тип данных использует VBA, если тип явно не объявлен
Какой тип данных использует VBA, если тип явно не объявлен

Какой тип данных использовать для listview
Всем привет. Есть listview1 в котором много строк и около 5 столбцов. Когда применяю фильтр...

Возможно ли использовать запросы, если источник данных находится в екселе?
Возможно ли использовать запросы, если источник данных находится в екселе. Т.е. лист1 источник,...

Какой тип данных использовать для дробного значения
У меня уже давно появилась проблема, часто нужно вписать дробное значение и чтобы была валидация....

Какой тип данных нельзя использовать внутри записи?
Какой тип данных нельзя использовать внутри записи ??

20
Crast
70 / 70 / 5
Регистрация: 10.02.2013
Сообщений: 434
20.09.2013, 08:49 2
Всю жизнь char использовали. Один char - один байт.
0
zss
Модератор
Эксперт С++
7936 / 7122 / 4449
Регистрация: 18.12.2011
Сообщений: 18,815
Завершенные тесты: 1
20.09.2013, 08:50 3
C
1
unsigned char
0
Crast
70 / 70 / 5
Регистрация: 10.02.2013
Сообщений: 434
20.09.2013, 08:50 4
Даже где то регулярно такая строчка весит
C
1
#define byte char
0
ValeryS
Модератор
7482 / 5665 / 725
Регистрация: 14.02.2011
Сообщений: 19,367
Завершенные тесты: 1
20.09.2013, 08:55 5
Цитата Сообщение от Crast Посмотреть сообщение
Всю жизнь char использовали.
Цитата Сообщение от zss Посмотреть сообщение
unsigned char
Цитата Сообщение от Crast Посмотреть сообщение
#define byte char
это зависит от настроек компилятора, кем будет char по умолчанию unsigned или signed
но чтобы не нарваться лучше писать явно
0
Crast
70 / 70 / 5
Регистрация: 10.02.2013
Сообщений: 434
20.09.2013, 10:43 6
ValeryS, какая вообще разница, то есть как байты зависят от знака типа данных?
0
Байт
Эксперт C
20299 / 12862 / 2690
Регистрация: 24.12.2010
Сообщений: 26,867
20.09.2013, 15:17 7
Crast,
-127 <= char <=128
0<=unsigned char<=255
В обоих случаях данные занимают ровно 1 байт.
А какой использовать - дело совершенно твое. Как тебе удобнее.
1
ValeryS
Модератор
7482 / 5665 / 725
Регистрация: 14.02.2011
Сообщений: 19,367
Завершенные тесты: 1
20.09.2013, 20:20 8
Цитата Сообщение от Crast Посмотреть сообщение
ValeryS, какая вообще разница, то есть как байты зависят от знака типа данных?
есть
или знаковые 127 -128
или беззнаковый 255 0
но я уже устал спорить
вы же все умные
C++
1
2
signed char i=-128>>2
unsigned char i=128>>2
для Вас же одно и тоже
0
Crast
70 / 70 / 5
Регистрация: 10.02.2013
Сообщений: 434
22.09.2013, 13:07 9
Цитата Сообщение от Байт Посмотреть сообщение
-127 <= char <=128
0<=unsigned char<=255
Цитата Сообщение от ValeryS Посмотреть сообщение
или знаковые 127 -128
или беззнаковый 255 0
Хотя бы ваш К.О. подписывайте)).
Цитата Сообщение от ValeryS Посмотреть сообщение
для Вас же одно и тоже
thnx bro. Теперь буду делать так:
C
1
#define byte signed char
0
silent_1991
Эксперт С++
5013 / 3073 / 271
Регистрация: 11.11.2009
Сообщений: 7,045
Завершенные тесты: 1
27.09.2013, 10:37 10
ValeryS, а при чём тут знак? Байт - набор битов. Если мы интерпретируем char как байт, какая разница, как интерпретировать знаковый бит? Существенно это было бы, если бы мы интепретировали каждый байт как число, но какой в этом практический смысл, если нам нужно обработать неизвестные данные как набор сырых байтов?
0
ValeryS
Модератор
7482 / 5665 / 725
Регистрация: 14.02.2011
Сообщений: 19,367
Завершенные тесты: 1
08.10.2013, 09:05 11
Цитата Сообщение от silent_1991 Посмотреть сообщение
ValeryS, а при чём тут знак? Байт - набор битов. Если мы интерпретируем char как байт, какая разница, как интерпретировать знаковый бит?
еще раз
мы не знаем что придет
и если мы возьмем знаковый тип то будет трудно из четырех(двух, восьми) байтов создать int
тем более что какой порядок бит(старший в начале\ в конце)
с беззнаковым эти проблемы уходят
вопрос не в том что изменяется количество байт(их 8 в современных распостраненных платформах)
а как потом эти данные интерпретировать
Цитата Сообщение от silent_1991 Посмотреть сообщение
если нам нужно обработать неизвестные данные как набор сырых байтов?
В том то и вопрос, как обработать?
умножить/ разделить? сдвинуть? вот здесь то и появится разница
это числа? буквы? уровни?
если просто нужно переписать допустим из потока в файл(сохранить) или дальше переслать, то использование знаковых/беззнаковых без разницы
0
silent_1991
Эксперт С++
5013 / 3073 / 271
Регистрация: 11.11.2009
Сообщений: 7,045
Завершенные тесты: 1
08.10.2013, 19:05 12
Цитата Сообщение от ValeryS Посмотреть сообщение
тем более что какой порядок бит(старший в начале\ в конце)
Путаетесь, батенька, путаетесь. Вы ведь про little-endian/big-endian, я правильно понял? Если да, то там оговаривается порядок следования байтов, не битов. И опять же, никакой проблемы со знаком не возникает. Отсюда следует, что...
Цитата Сообщение от ValeryS Посмотреть сообщение
и если мы возьмем знаковый тип то будет трудно из четырех(двух, восьми) байтов создать int
...не труднее, чем из четырёх беззнаковых байтов, поскольку и там, и там достаточно знать порядок следования байтов на платформе.
Цитата Сообщение от ValeryS Посмотреть сообщение
а как потом эти данные интерпретировать
Так ведь о том и речь. Вопрос в том, как интерпретировать старший (знаковый) бит, а не в том, как его интерпретирует компилятор в момент компиляции для конкретного типа.
Цитата Сообщение от ValeryS Посмотреть сообщение
умножить/ разделить? сдвинуть? вот здесь то и появится разница
Байты собираетесь умножать/делить? Разница появляется только после интерпретации. Трактуем байт как число? Можем умножать/делить. Трактуем как кусок числа? Склеиваем числа из нескольких байтов (знаковость типа, опять же, роли не играет), потом умножаем/делим.
Цитата Сообщение от ValeryS Посмотреть сообщение
это числа? буквы? уровни?
Это байты. Числа/буквы/уровни(?) появляются после интерпретации. До этого байт - не что иное как 8 битов, ни больше ни меньше.
0
ValeryS
Модератор
7482 / 5665 / 725
Регистрация: 14.02.2011
Сообщений: 19,367
Завершенные тесты: 1
08.10.2013, 19:35 13
Цитата Сообщение от silent_1991 Посмотреть сообщение
Если да, то там оговаривается порядок следования байтов,
согласен
не то написал, конечно байт
но иногда и порядок бит меняется,особенно при передаче по последовательному порту, зависит от протокола, сталкивался с таким, после стартовой посылки идет не младший а старший бит,хотя конечно к теме это не относится
Цитата Сообщение от silent_1991 Посмотреть сообщение
Это байты. Числа/буквы/уровни(?) появляются после интерпретации.
так в этой интерпретации и вся соль, иначе это просто набор битов

хотя я писал про другое

если написать вот так
C++
1
2
char ch='b';// написал b потому что и русская и латинская а одинаковы по начертанию  
   if(ch<'я')
условие может сработать или не сработать в зависимости от того как компилятор интерпретирует char
знаковый
b(98)<я(-1) ложь
или беззнаковый
b(98)<я(255) истина
вот про что была моя фраза
Цитата Сообщение от ValeryS Посмотреть сообщение
но чтобы не нарваться лучше писать явно
0
silent_1991
Эксперт С++
5013 / 3073 / 271
Регистрация: 11.11.2009
Сообщений: 7,045
Завершенные тесты: 1
08.10.2013, 20:29 14
ValeryS, вот опять. Вы сразу работаете с байтом как с символом, т.е. вы уже произвели интерпретацию. А если байт - кусок 4-байтового целого? Станете ли вы два байта сравнивать в данном случае?

Добавлено через 1 минуту
Цитата Сообщение от ValeryS Посмотреть сообщение
после стартовой посылки идет не младший а старший бит
Это не порядок битов в байте меняется, а просто протокол определяет, что байт придёт в порядке от старшего бита к младшему, не наоборот. В конечном итоге из принятых битов необходимо склеить байт, и там уже порядок должен быть верным.
0
ValeryS
Модератор
7482 / 5665 / 725
Регистрация: 14.02.2011
Сообщений: 19,367
Завершенные тесты: 1
08.10.2013, 20:34 15
Цитата Сообщение от silent_1991 Посмотреть сообщение
А если байт - кусок 4-байтового целого? Станете ли вы два байта сравнивать в данном случае?
может и стану
например сравню старшие байты и будет понятно стоит ли сравнивать(создавать) 4 битное целое
или например в строке сравнив первый символ сделаю вывод стоит сравнивать дальше или нет
но ты прав, в любом случае идет интерпретация данных

так что мы сейчас обсуждаем "сферического коня в вакууме"
0
silent_1991
Эксперт С++
5013 / 3073 / 271
Регистрация: 11.11.2009
Сообщений: 7,045
Завершенные тесты: 1
08.10.2013, 20:36 16
Цитата Сообщение от ValeryS Посмотреть сообщение
сферического коня в вакууме
"Сферический байт в ячейке памяти", да
0
ValeryS
Модератор
7482 / 5665 / 725
Регистрация: 14.02.2011
Сообщений: 19,367
Завершенные тесты: 1
08.10.2013, 20:38 17
Цитата Сообщение от silent_1991 Посмотреть сообщение
Это не порядок битов в байте меняется, а просто протокол определяет, что байт придёт в порядке от старшего бита к младшему, не наоборот. В конечном итоге из принятых битов необходимо склеить байт, и там уже порядок должен быть верным.
это смотря что за байт принимать
например код Грея или Соломона-Ричи
идут восьмибитные посылки они байт или нет?
да и в байте не обязательно 8 бит
0
silent_1991
Эксперт С++
5013 / 3073 / 271
Регистрация: 11.11.2009
Сообщений: 7,045
Завершенные тесты: 1
08.10.2013, 20:44 18
Цитата Сообщение от ValeryS Посмотреть сообщение
Соломона-Ричи
Соломона-Рида))
Цитата Сообщение от ValeryS Посмотреть сообщение
это смотря что за байт принимать
Мы так или иначе будем работать с байтами, такова нынешняя архитектура.
Цитата Сообщение от ValeryS Посмотреть сообщение
идут восьмибитные посылки они байт или нет?
Снова интерпретация, только теперь в другую сторону - бьём байты на биты (группы битов).
Цитата Сообщение от ValeryS Посмотреть сообщение
да и в байте не обязательно 8 бит
Снова вопрос архитектуры. Мы можем написать приложение, которое будет считать за байт блок из 10 битов, но на уровне архитектуры (я не знаю точно, есть ли сейчас хоть где-нибудь в ходу архитектуры с не-8-мибитовыми байтами, но достаточно того, что абсолютное большинство систем принимают за байт именно 8 битов) мы всё равно будем работать с 8-мибитовыми ячейками.
Цитата Сообщение от ValeryS Посмотреть сообщение
например сравню старшие байты и будет понятно стоит ли сравнивать(создавать) 4 битное целое
А вот тут уже необходима информация о знаке, но о знаке не отдельных байтов, а всего 4-байтового целого. Ведь сравнивая старшие байты, необходимо знать, как именно производить сравнение, основываясь на знаке всего числа. И тут снова не важно, знаковые у нас байты изначально или беззнаковые.
0
ValeryS
Модератор
7482 / 5665 / 725
Регистрация: 14.02.2011
Сообщений: 19,367
Завершенные тесты: 1
08.10.2013, 20:57 19
Цитата Сообщение от silent_1991 Посмотреть сообщение
Соломона-Рида))
пардон
Цитата Сообщение от silent_1991 Посмотреть сообщение
(я не знаю точно, есть ли сейчас хоть где-нибудь в ходу архитектуры с не-8-мибитовыми байтами,
есть
например звуковые процессоры
Цитата Сообщение от silent_1991 Посмотреть сообщение
И тут снова не важно, знаковые у нас байты изначально или беззнаковые.
ну так я уже с этим согласился
но для обработки то это важно
например для этого
Цитата Сообщение от ValeryS Посмотреть сообщение
signed char i=-128>>2
unsigned char i=128>>2
сформируются две разных ассемблерных команды sar и shr (я об 80х86)
0
silent_1991
Эксперт С++
5013 / 3073 / 271
Регистрация: 11.11.2009
Сообщений: 7,045
Завершенные тесты: 1
08.10.2013, 21:21 20
Цитата Сообщение от ValeryS Посмотреть сообщение
например для этого
А какое в данном случае значение играет знаковость/беззнаковость переменной i? Здесь переменная и её тип вступают в игру уже после вычисления инициализирующего выражения. А до этого оба операнда в выражении сдвига трактуются компилятором как int.

Добавлено через 5 минут
Хотя написанное имеет малое отношение к изначальному вопросу.
В конечном итоге, видимо, каждый останется при своём мнении (как обычно). Но я продолжаю настаивать, что стадия обработки наступает следом за стадией интерпретации. А битовый сдвиг значения - обработка.
0
08.10.2013, 21:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.10.2013, 21:21

Какой тип данных использовать для арифметического выражения?
Добрый день. У меня возникла необходимость хранить данные в столбце такого типа: ...

Какой тип данных использовать для работы с большими числами?
Здравствуйте! Какой тип данных можно использовать для больших чисел( unsigned long long не...

Какой тип данных лучше использовать для хранения времени в БД?
В БД созданной в Access есть поле которое хранит время, имеет тип &quot;Дата и время&quot;, короткий формат и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru