Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> преобразование бинарных данных в массив чисел 
V
    Опции темы
alex_smirnov
Дата 31.7.2007, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: нет
Всего: 4



Пишу на СИ.

Считываю поток данных из бинарного файла в char array[N].
каким образом я могу преобразовать эти данные в целочисленные значения?

Заранее спасибо.
PM GTalk Jabber   Вверх
Kuvaldis
Дата 31.7.2007, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


механик-вредитель
***


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

Репутация: 11
Всего: 61



alex_smirnov, 
Может, читать из файла при помощи fscanf() ? Т.е. преобразование будет на этапе работы функции.
Или тебя интересует преобразование ПОСЛЕ чтения?

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

Это сообщение отредактировал(а) Kuvaldis - 31.7.2007, 12:05


--------------------
Помни - когда ты спишь, враг не дремлет
Спи чаще и дольше, изматывай врага бессоницей
PM MAIL ICQ   Вверх
alex_smirnov
Дата 31.7.2007, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: нет
Всего: 4



Файл бинарный, в нём лежит фото(NxN). Каждый пиксель кодируется двумя байтами.
Есть большое желание преобразовывать после чтения(fscanf не катит smile ).
PM GTalk Jabber   Вверх
bsa
Дата 31.7.2007, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



два байта - это и есть целое число. в частности short.
PM   Вверх
akizelokro
Дата 31.7.2007, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


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

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



Разными. Можешь конвертить 
union{
int x;
char c;
} ..., 
потом можешь просто присваивать перебором (unsigned int)(signed char)   smile  шучу
можешь прописывать байт из char напрямую в байт int.  Сегодня не день повышенной солнечной активности?


--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
maxim1000
Дата 31.7.2007, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 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
PM WWW   Вверх
alex_smirnov
Дата 31.7.2007, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: нет
Всего: 4



example please!

хотя, как я понял... надо просто распердолить стрингу на стринги по 2 символа... а потом простым присваиванием что-ли? да неужели?
PM GTalk Jabber   Вверх
zkv
Дата 31.7.2007, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



Цитата(alex_smirnov @  31.7.2007,  11:56 Найти цитируемый пост)
Считываю поток данных из бинарного файла в char array[N].
каким образом я могу преобразовать эти данные в целочисленные значения?

а что понимаешь под преобразованием?
в любом случае там единички и нолики,
 можешь их интерпретировать как символы, можешь как числа, можешь как пиксели.
PM MAIL   Вверх
alex_smirnov
Дата 31.7.2007, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: нет
Всего: 4



О, спасибо maxim1000.

Будем пробовать.

Это сообщение отредактировал(а) alex_smirnov - 31.7.2007, 12:34
PM GTalk Jabber   Вверх
akizelokro
Дата 31.7.2007, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


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

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



Или присвоить адрес твоего массива указателю на short int массив.


--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
alex_smirnov
Дата 5.8.2007, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: нет
Всего: 4



x[i]=int(y[2*i])+(int(y[2*i+1])<<8)
заработало )

закрываю тему.

только вот ещё пожалуйста объясните, как это char может быть unsigned? т.е. с ним как раз заработало, но механизм несколько непонятен...

PM GTalk Jabber   Вверх
nickless
Дата 5.8.2007, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гентозавр
****


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

Репутация: 19
Всего: 181



Цитата(alex_smirnov @  5.8.2007,  15:24 Найти цитируемый пост)
как это char может быть unsigned?

А почему бы нет?
char может принимать значения от -128 до +127
unsigned char - от 0 до 255


--------------------
user posted image

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
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




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


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

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