![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| alex_smirnov |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 194 Регистрация: 22.6.2007 Где: Санкт-Петербург Репутация: нет Всего: 4 |
Пишу на СИ.
Считываю поток данных из бинарного файла в char array[N]. каким образом я могу преобразовать эти данные в целочисленные значения? Заранее спасибо. |
|||
|
||||
| Kuvaldis |
|
|||
![]() механик-вредитель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1189 Регистрация: 16.6.2006 Где: Минск Репутация: 11 Всего: 61 |
alex_smirnov,
Может, читать из файла при помощи fscanf() ? Т.е. преобразование будет на этапе работы функции. Или тебя интересует преобразование ПОСЛЕ чтения? А вообще было бы неплохо сказать, каким образом у тебя в файле хранятся данные. Это сообщение отредактировал(а) Kuvaldis - 31.7.2007, 12:05 -------------------- Помни - когда ты спишь, враг не дремлет Спи чаще и дольше, изматывай врага бессоницей |
|||
|
||||
| alex_smirnov |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 194 Регистрация: 22.6.2007 Где: Санкт-Петербург Репутация: нет Всего: 4 |
Файл бинарный, в нём лежит фото(NxN). Каждый пиксель кодируется двумя байтами.
Есть большое желание преобразовывать после чтения(fscanf не катит |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
два байта - это и есть целое число. в частности short.
|
|||
|
||||
| akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
Разными. Можешь конвертить
union{ int x; char c; } ..., потом можешь просто присваивать перебором (unsigned int)(signed char) можешь прописывать байт из char напрямую в байт int. Сегодня не день повышенной солнечной активности? -------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 17 Всего: 110 |
наверное, стоит перевести всё unsigned char для начала, а потом уже можно так:
x[i]=int(y[2*i])+(int(y[2*i+1])<<8) это - при условии, что сначала в массиве идут младшие байты, а потом старшие Это сообщение отредактировал(а) maxim1000 - 31.7.2007, 12:29 -------------------- qqq |
|||
|
||||
| alex_smirnov |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 194 Регистрация: 22.6.2007 Где: Санкт-Петербург Репутация: нет Всего: 4 |
example please!
хотя, как я понял... надо просто распердолить стрингу на стринги по 2 символа... а потом простым присваиванием что-ли? да неужели? |
|||
|
||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
а что понимаешь под преобразованием? в любом случае там единички и нолики, можешь их интерпретировать как символы, можешь как числа, можешь как пиксели. |
|||
|
||||
| alex_smirnov |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 194 Регистрация: 22.6.2007 Где: Санкт-Петербург Репутация: нет Всего: 4 |
О, спасибо maxim1000.
Будем пробовать. Это сообщение отредактировал(а) alex_smirnov - 31.7.2007, 12:34 |
|||
|
||||
| akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
Или присвоить адрес твоего массива указателю на short int массив.
-------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
| alex_smirnov |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 194 Регистрация: 22.6.2007 Где: Санкт-Петербург Репутация: нет Всего: 4 |
x[i]=int(y[2*i])+(int(y[2*i+1])<<8)
заработало ) закрываю тему. только вот ещё пожалуйста объясните, как это char может быть unsigned? т.е. с ним как раз заработало, но механизм несколько непонятен... |
|||
|
||||
| nickless |
|
|||
![]() Гентозавр ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2976 Регистрация: 29.8.2005 Где: Germany Репутация: 19 Всего: 181 |
А почему бы нет? char может принимать значения от -128 до +127 unsigned char - от 0 до 255 -------------------- ![]() Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies - Linus Torvalds |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |