Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Бинарное чтение в мемо


Автор: klein 12.3.2007, 01:55
Пишу на билдере, но решил, что вопрос относится к  этому разделу.
Нужно бинарно  прочитать файл и записать в мемо.
Получилось вот что: 

Код

#include <vcl.h>
#pragma hdrstop
#include <cstdio>
#include "Unit1.h"
#include <iostream.h>
#include <stdio.h>
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner) {}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{ 
  unsigned char buffer[ 10 ];

     if (OpenDialog1->Execute())
   {
     FILE*inp = fopen(OpenDialog1->FileName.c_str(), "rb" );
     fread( buffer, 1, 10, inp);
     fclose( inp );
     int i;
     for (i=0; i=10; i++)
     Memo1->Lines->Add(buffer[i]);
   }
}


Получилась абра-кадабра. Выводит одно и тоже + тормозит и не останавливается.
Что посоветуете? 

Автор: Kuvaldis 12.3.2007, 03:12
klein, 
Код

     for (i=0; i=10; i++)    
          Memo1->Lines->Add(buffer[i]);


Условие цикла неправильно записано, нужно
Код

 for (i=0; i < 10; i++)    


Поэтому и получается бесконечный цикл:
на каждом шаге идет присваивание i = 10, результатом этого присваивания является 10.. Это условие компилятором расценивается как истина, так как оно не 0. Отсюда и цикл. А выводит одно и то же, так как на каждом шаге i равно 10 smile

Автор: klein 12.3.2007, 10:23
Протупил smile  , только есть еще ошибка - пишет просто десятичными числами, а хотелось чтобы показало бинаррный код. smile  Подозрения на unsigned char buffer[ 10 ]; его надо в бул перевести?

Автор: klein 12.3.2007, 11:39
Эксперементировал записывать прочитаное в файл (с масива unsigned char buffer[ 10 ])

Код

{
  unsigned char buffer[ 10 ];

     if (OpenDialog1->Execute())
   {
     FILE*inp = fopen(OpenDialog1->FileName.c_str(), "rb" );
     fread( buffer, 1, 10, inp);
     fclose( inp );
     int i;
     for (i=0; i<10; i++)
     Memo1->Lines->Add(buffer[i]);
   }
     if (SaveDialog1->Execute())
       {  
           int i;
           FILE*inp = fopen(SaveDialog1->FileName.c_str(), "wb" );
           for (i=0; i<10; i++)
           fputc(buffer[i]);
           fclose( inp );
       } 
}


Ошибка только с  fputc. Я ведь правильно выбрал  fputc для записи в файл? Или лучьше использовать чтото другое?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)