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


Автор: Yline 3.2.2007, 08:24
Подскажите пожалуйста, как заменить последний бит первого байта одного файла, первым битом первого байта другого файла.

Автор: GIK 3.2.2007, 09:50
Потоком открывешь файл, считываешь первый эллемент в переменную. Обращеешся к эллементу побитово, например так:

Код

char  a='f' ; //предположим,что  это первый эллемент одного файла
char  b='g'; //это соответственно последний, другого
bool aa=false;
bool bb=false;
if (a & 1){aa=true;} //если эллемент имеет "единичку" в первом бите
if (b & 128){bb=true;}
if(bb){
a= a | 128; //заносим в символ единичку
}
if(aa){
b=b | 1;  //заносим в символ единичку
}

/*
Тут заносишь сиволы обратно в файл
*/




Автор: Adil' 3.2.2007, 21:12
Код

#include <io.h>
#include <fcntl.h>

int dst = open("file.dst", O_BINARY | O_RDWR);
if( dst != -1 )
{
  unsigned char bDest;
  if( read(dst, &bDest, 1) == 1 )
  {
    int src = open("file.src", O_BINARY | O_RDONLY);
    if( src != -1 )
    {
      unsigned char bSrc;
      if( read(src, &bSrc, 1) == 1 )
      {
        bDest = ( bDest & 0x7F ) | ( bSrc << 7); //счтиая, что "последний" - это 7-ой бит, а "первый" - 0-ой
        seek(dst, 0, 0);
        if( write(dst, &bDest, 1) != 1 )
          ;//write error
      }
      else
        ;//read error
    }
    else
      ;//open error
    close(src);
  }
  else
    ;//read error
  close(dst);
}
else
   ;//open error


Автор: Yline 11.2.2007, 08:35
Хотел открыть в  conteiner_char файл с которым в дальнейшем буду работать, но почему то при открытии файла размером больше 152 байта получается ошибка

Код

//---------------------------------------------------------------------------

#include <vcl.h>
#include <fstream.h>
#include <cstring.h>
#pragma hdrstop

#include "stg.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
if (OpenDialog1->Execute())
  {        
  ifstream file_conteiner (OpenDialog1->FileName.c_str(), ios::binary);
  if (!file_conteiner) return;
  
  int array_size = 0;
  typedef char* charPtr;
  charPtr conteiner_char;
  conteiner_char = new char[array_size];
  conteiner_char ="";

  char conteiner_char_tmp[1]="";                                       

  int size_conteiner = 0;
  while (!file_conteiner.eof())
    {                   
    file_conteiner.read(conteiner_char_tmp, 1);     
    conteiner_char[size_conteiner] = conteiner_char_tmp[0];
    size_conteiner++;
    }
  Memo1->Lines->Add(conteiner_char);
  Edit1->Text = OpenDialog1->FileName;
  Edit3->Text = size_conteiner;
  file_conteiner.close();                                              
  }
}
//---------------------------------------------------------------------------

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