Pliki binarne c++

0

Witam, potrzebuje sprawdzić dane zapisane na kolejnych bajtach mojego pliku.
Wiem, że char jest zapisywany na 1 bajcie czyli wartość zapisana w charze powinna być z zakresu <0,255>.
Czy mógłby mi ktoś wyjaśnić więc dlaczego kod:

#include <fstream>
#include <iostream>
using namespace std;
int main(int argc, char *argv[]){
fstream plik; plik.open("nazwa.exe",ios::in|ios::binary);
char bajty;
while(plik.read(&bajty,1)){
                          cout<<(int)bajty<<endl;
                          }
plik.close();
}

wyrzuca na ekran liczby ujemne?

0

char <-128;127>
unsigned char <0;255>

0
qwrc napisał(a):

char <-128;127>
unsigned char <0;255>

Nie do końca tak jest. Standard definiuje 3 różne typy char, signed char i unsigned char. To czy char może przechowywać wartości ujemne zależy od implementacji.
http://stackoverflow.com/questions/436513/char-signed-char-char-unsigned-char

0

dzieki poprawione

bajty>=0 ? (cout<<(int)bajty) : (cout<<(int)-bajty);cout<<endl;

ale to tez nie zalatwia sprawy...
w jaki więc spopsób mogę odczytać z pliku 1 bajt bym mógł go odczytać w systemie dziesiętnym? moze:

bajty>=0 ? (cout<<(int)bajty) : (cout<<(int)(-bajty+127));cout<<endl;
0

Po prostu użyj unsigned char lub uint8_t

0

wystarczy:
cout<<(int)(unsigned char)bajty;

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