cin.get leißt nur x Bytes ein
-
Hallo,
mit cin.get lese ich Binärdaten ein. Die \n's müssen mitgelesen werden.
Also habe ich mir gedacht, nutze ich cin.get mit nur einem char, um jedes Zeichen einlesen zu können...Bei kleinen Datenmengen < 1.075 Bytes funktioniert es wunderbar. Ab dem 1.075 Byte stoppt cin.get plötzlich mit dem Einlesevorgang. (Fehlerstatus EOF) *Ighffkftiftio rr*
Die Daten lese ich mittels "Programm < Datei.txt" ein.
Hier ein bisschen Code dazu.
bEncrypt=false; bool bTmpBuffer=false; char readBuffer=0; BYTE Buffer[16]={0}; int i=0; char cBufferLen=48; //"0" cin.binary; //??? while(cin.get(readBuffer)){ //if(readBuffer==13||readBuffer==10) readBuffer=58; //Encrypt debug: Für eine augenfreundliche Welt Buffer[i]=readBuffer; ++i; if(i==16){ if(bEncrypt){ blockEncrypt(&encipher,&keyin,Buffer,128,outbuf); for(i=0;i<16;++i) cout << outbuf[i]; }else{ if(!bTmpBuffer){ bTmpBuffer=true; }else{ for(i=0;i<16;++i) cout << outbuf[i]; } blockDecrypt(&decipher,&keyin,Buffer,128,outbuf); } i=0; } } if(i!=0){ if(bEncrypt){ itoa16(16-i,cBufferLen); //<<Eigene 0-9-A-F Funktion /MS Zeugs: _itoa_s(16-i,cBufferLen,16); for(;i<16;++i) Buffer[i]=64; //64=@ 59=; 0=\0 blockEncrypt(&encipher,&keyin,Buffer,128,outbuf); for(i=0;i<16;++i) cout << outbuf[i]; }else{ if(i!=1) return -3; for(i=0;i<16-a16toi(Buffer[0]);++i) cout << outbuf[i]; } } if(bEncrypt) cout << cBufferLen;(
^Auszug eines kleinen Verschlüsslungsprogramms.
Es werden 16 Bytes benötigt um einen Block zu ver-/entschlüsseln.
Beim Verschlüsseln schreibe ich die letzte ursprüngliche Blockgröße als Hexwert in ein Zeichen.
Beim Entschlüsseln wird das letzte Zeichen genommen, um den letzten Block nur teilweise auf die Ursprungsgröße auszugeben.
Klappt alles, nur halt nicht mit größeren Dateien. Warum nur?
)MfG,
Programmierer auf scheinbaren und offensichtlichem Anfängerniveau
-
Hast du die Datei auch wirklich mit ios::binary geöffnet? Ist das 1075. Zeichen evtl. der ASCII-Code 26 (Strg+Z)?!!
-
Whoops
das war es wohl. STDIN wurde nicht im Binärmodus geöffnet, bzw. irgend jemand <-- hat es wohl auskommentiert.THX