mam jedo małe pytanko:
Jak wczytać pojedyńczy bit z pliku?
W jakiej zmiennej mozna przechowywac pojedynczy bit?
I to na tyle.podro
var F: File;
c:Char;
i: Integer;
begin
assignFile(F,'NazaPliku');
try
while not eof(F) do
for i:=1 to ktory_bit do //sczytujesz bity, dopuki wskaźnik nie ustawi się na Twoim szykanym bicie;
Read(F,c);
showmessage(c); // tu Ci wyświetla jeśli dojdzie do tego bitu.
finally
clocefile(F);
end;
end;
mniej więcej to tyle. Można jeszcze inaczej, ale sam już do tego dojdziesz :)
BIT!
A na moje oko nie bedzie to latwe. Odczytujesz bajt i rozpisujesz go na bity, jak - nie wiem.
Bit <> Bajt
Bajt to 8 bitów, więc aby odczytac bity danego bajta musisz najpierw odczytać ten bajt (np. tak jak podał endrique) a nastepnie rozbić go na bity. http://4programmers.net/Forum/viewtopic.php?id=37048&post=61527#61527
Najprosciej chyba tak:
function dajbit(b,ktory:byte):boolean;
begin result:=false;
case ktory of
0=(b and 1)<>0;
1=(b and 2)<>0;
2=(b and 4)<>0;
3=(b and 8)<>0;
4=(b and 16)<>0;
5=(b and 32)<>0;
6=(b and 64)<>0;
7=(b and 128)<>0;
end;
end;
ta funkcja oczywiscie zwraca true jesli bit 'ktory' w bajcie b jest 1 a false jesli jest on zerem.
nie da się odczytać pojedyńczego bitu, bo najmniejszym typem, który można zapisać do pliku jest bajt :-)
Ale bajt sklada sie z bitow, wiec mozna odczytac bajt i wyciagnac bit
Ale co Ty chcesz wyciągać ?.. - zobacz na plik tekstowy - wyobraź sobie go jako ciąg bajtów..
B B B B B B
B - bajt..
A każdy bajt składa się z ośmiu bitów - możesz co najwyżej odczytać 8-mio bitowe kombinacje bajta - odczytać bajt i sprawdzić w tablicy ASCII jego kod w zapisie dwójkowym.
Pisze gre, napisałem już prawie wszystkie funkcje importujace mapkę q3 zostało mi tylko wczytanie list PVS no i troche mi sie spie.......o.
Mam podaną liczbę klastrów i liczbe bitów w klustrze.
Jak komuś pomoż to mam kawałek kodu w C++
struct tBSPVisData
{
int numOfClusters;
int bytesPerCluster;
byte *pBitsets;
};
fread(&(m_clusters.numOfClusters), 1, sizeof(int), fp);
fread(&(m_clusters.bytesPerCluster), 1, sizeof(int), fp);
int size = m_clusters.numOfClusters * m_clusters.bytesPerCluster;
m_clusters.pBitsets = new byte [size];
fread(m_clusters.pBitsets, 1, sizeof(byte) * size, fp);
no i to na tyle
Moze to Ci pomoze.
Type
tBSPVisData = record
numOfClusters: Integer;
bytesPerCluster: Integer;
pBitsets: ^Byte;
end;
var
Plik: file;
m_clusters: tBSPVisData;
size: Integer;
begin
AssignFile(Plik, 'nazwa');
Reset(Plik, 1);
BlockRead(plik, m_clusters.numOfClusters, sizeof(Integer));
BlockRead(plik, m_clusters.bytesPerCluster, sizeof(Integer));
size := m_clusters.bytesPerCluster * m_clusters.numOfClusters;
GetMem(m_clusters.pBitsets, size);
BlockRead(plik, m_clusters.pBitsets^, size);
CloseFile(Plik);
end;