plik do string binarnie

0

chcę wczytac cały plik do stringa w taki sposob, zeby kazdy bit pliku był osobno zapisany jako znak w stringu.Nie wiem czy to dobrze robie. czy ktos moze na to spojrzec i mi doradzic czy robie to poprawnie?

 



void load_file(string FileName)//wczytanie pliku do tablicy znaków
{

  ifstream is;
  is.open (FileName.c_str(), ios::binary );


  is.seekg (0, ios::end);
  length = is.tellg();
  is.seekg (0, ios::beg);
 

  buffer = new char [length+1];

 
  is.read (buffer,length);
  is.close();


}
 
char get(char a, int pos)//poranie konkretnego bitu z char'a
{ char znak;

     if(a&(1<<pos)) znak='1';
     else znak='0';
	 return znak;	
}

 

for(short i=0;i<8;i++)//wczytanie bit bo bicie do string'a
str=str+get(buffer[i],i);

przyklad jak powinno dzialac:
char znak= '*';// znak binarnie to 0010 1010
string bin="0010 1010";//po zamianie

czy moj kod robi to porawnie? bo mam pewne wątpliwosci

0

No ale nie uruchamiałeś tego skoro masz wątpliwości? Robiłem coś podobnego kiedyś ale ja użyłem bitset i jego metody to_string(), która zwraca elegancki, zero-jedynkowy string.

0

o to musze sie zainteresowac tym bitsetem.Uruchamialem,ale wyniki jakie mi program pozkazywal nie podobaly mi sie za bardzo.
A moge prosic o jakis przyklad z urzyciem bitset?

0
#include <bitset>
using std::bitset;

char chr = '*';
string binChr = bitset<8>(chr).to_string();

edit
Nie pamiętam tylko przy takiej operacji zera nie znaczące były opuszczane czy nie, sprawdź to.

0
for(short i=0;i<8;i++)//wczytanie bit bo bicie do string'a
str=str+get(buffer[i],i);

Pierwszy bit pierwszego znaku z bufora, drugi bit drugiego znaku, trzeci bit trzeciego znaku. Chyba nie tak miało być?

0
rapapam napisał(a)

A moge prosic o jakis przyklad z urzyciem bitset?

tutaj masz przykład użycia.

0

Rev - rzeczywiscie tu byl blad. ale z tym bitsetem to strzal w dziesiatke i dziala wszystko idealnie:) Dzieki wielkie za wszelka pomoc

a jakbym teraz chcial w drugą strone z wykorzystaniem bitset?
czyli stringu juz mam binarnie zapisany znak i go z powrotem przekonwetwoac do char urzywajac wlasnie bitset.
Da sie tak?

0

nie wiem po co kombinowac z bitset skoro kod est banalny

 for (int i = 0; i<8; ++i){
	if ( ciagbitow[i] == '1' ) znak |= 0x01;
	znak <<1;
}

dla stringa zawierajacego 8 znakow

1 użytkowników online, w tym zalogowanych: 0, gości: 1