![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| tht |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 118 Регистрация: 10.5.2006 Репутация: нет Всего: 1 |
в общем. ни как не могу прочитать в файле байты 0x00
типа это указывает что это конец файла. а мне нужно их прочесть и поместить в буфер подскажи плиз как, с помощью стандартный функций прочитать такие символы как 0x00 и подобные. заранее благодарю. |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 1 Всего: 260 |
||||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
недолжно. как ты проверяешь конец файла? |
|||
|
||||
| tht |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 118 Регистрация: 10.5.2006 Репутация: нет Всего: 1 |
я вам реально говорю. не читает !!! короче есть 8 байт в файле, такого вида
0xE2 0x03 0x00 0x00 0x00 0x58 0x48 0x4D первый два байта читаются функциями любыми библиотеки stdio fread(); fgets(); fgetc(); и тп. остальные байты т.е. 0x00 не читаются, и указатель не уходит дальше них. а нада считать все имеющиееся байты включая эти нули 0x00. все 8 байтов. |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
tht, приведи код как ты читаешь из файл, а то так сложно что-то говорить..
|
|||
|
||||
| tht |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 118 Регистрация: 10.5.2006 Репутация: нет Всего: 1 |
вы дает 2 байта прочитаных. и соотвественно выводит только этих два байта которые первые в файле. |
|||
|
||||
| Vyacheslav |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
-------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 1 Всего: 260 |
tht, ты записываешь данные в null-terminated строку. т.е. в список символов, концом которого(концом строки, а не файла!) считается символ с кодом 0. т.е. ты реально читаешь 8 байт. но помещаешь в структуру, из которой сможешь вытянуть только символы до первого кода ноль.
|
|||
|
||||
| tht |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 118 Регистрация: 10.5.2006 Репутация: нет Всего: 1 |
и что мне с этим можно сделать ? Vyacheslav спасибо. учту, но мне еще интересен другой вариант. |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
подумай, тут уже дело в обработке строки, а вообще можешь читать попеременно в переменную типа int и сразу выводить на экран |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 1 Всего: 260 |
||||
|
||||
| tht |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 118 Регистрация: 10.5.2006 Репутация: нет Всего: 1 |
они там в файле 0x00 хоть как будут и должны быть. считайте что это протокол такой. которые изменить нельзя.
|
|||
|
||||
| SerpentVV |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 27.11.2006 Где: Астрахань Репутация: 1 Всего: 1 |
1. По умолчанию ты открываешь файл как текстовый... Нужно прописать в fopen "rb" 2. Функция strlen тебе до первого нуля и посчитает... 3. Выводишь ты их как строку - опять же выведется до нуля... Добавлено @ 17:18
Тогда нельзя работать со строковыми функциями ибо они все до ближайшего нуля работают... |
||||||
|
|||||||
| tht |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 118 Регистрация: 10.5.2006 Репутация: нет Всего: 1 |
ничего не получается. я пробывал всяко как вы говорили я даже буфер сделал int rcvBuff[10];
видите ? целый... все равно чтение только первых двух байтов. короче говоря не читает функция fread все 8 байтов, а только до нуля. в то время как printf() способна вывести любые байты на экран. Это сообщение отредактировал(а) tht - 7.2.2007, 18:12 |
|||
|
||||
| SerpentVV |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 27.11.2006 Где: Астрахань Репутация: 1 Всего: 1 |
Короче, приведи полный текст с объявлениями переменных и попытками вывода на экран...
|
|||
|
||||
| tht |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 118 Регистрация: 10.5.2006 Репутация: нет Всего: 1 |
|
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
и фсе Это сообщение отредактировал(а) vinter - 7.2.2007, 18:42 |
|||
|
||||
| SerpentVV |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 27.11.2006 Где: Астрахань Репутация: 1 Всего: 1 |
Сделай вот так:
char buf[1000] ={0}; //... int num = fread(buf, sizeof(char), 8, file); В num получишь реально прочитанное количество байтов Советую читать в байтовый массив, а не в интовский... |
|||
|
||||
| tht |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 118 Регистрация: 10.5.2006 Репутация: нет Всего: 1 |
vinter попробывал. вылетает ошибка программы.
SerpentVV результат тот же самый что и был у меня... т.е. 2 байта. |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
tht, покажи как ты сделал с моим кодом
привыкни приводить полность ошибку, а не "у меня ошибка.." |
|||
|
||||
| tht |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 118 Регистрация: 10.5.2006 Репутация: нет Всего: 1 |
короче я наконец то вас всех понял... и сделал так
странно но почему rcvBuff не выводит все данные а опять же только эти 2 байта первых ? в то время как из сети, от все 8 байтов сгружает нормально и нормально в полном виде выводит. это когда я как клиент подключаюсь. |
|||
|
||||
| SerpentVV |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 27.11.2006 Где: Астрахань Репутация: 1 Всего: 1 |
Потому что выводить нужно вот так:
То есть ты выведешь символ как ЦЕЛОЕ... Ноль как символ не выводится... Это сообщение отредактировал(а) SerpentVV - 8.2.2007, 15:19 |
||||||
|
|||||||
| tht |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 118 Регистрация: 10.5.2006 Репутация: нет Всего: 1 |
а вот и НЕТ. выводиться
printf("%c",ch); - это выводит все до последнего байта включая НУЛИ. просто на экране символов 0x00 не видно так как они ничего не значат, точнее говоря это выглядит так будто там пробелы вывелись. а я cпросил про переменную rcvBuff, пытаюсь вывести ее вс. целиком на экран printf("%s",rcvBuff); выводятся только первые два байта, до нуля. НО, когда я эти данные, 8 байтов, получаю из сети в эту переменную и вывожу printf("%s",rcvBuff); на экран всё выводится нормально, все 8 байтов. т.е. даже НУЛИ, которые на экране похожи на пробелы, так как их не видно. только в одном случае не выводятся, в том когда я загружаю эти же данные из ФАЙЛА. |
|||
|
||||
| comcon1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 11.6.2005 Где: Москва ДАС-МГУ Репутация: 12 Всего: 17 |
кароче
читай в такие структы. тебе правильно сказали. и len задавай исходно. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |