» Selbsgeschriebene Funktion getint() und getuchar() liest Bytes aus Datei als int und unsigned char

Beispiel für die Erzeugung von Zufallszahlen, mit Quellcode für die Funktionen!Neuen Thread eröffnenNeue Antwort erstellenExample how to convert a double value in a binary coded decimal
AutorNachricht
Junior 
Name: Voller Name als Anagramm: Fitje Weshoms
Geschlecht:
Fahrzeug: Yamaha YZF R6 Thundercat
Anmeldedatum: 15.07.2012
Beiträge: 92
Wohnort: Amberg, Oberpfalz
19.01.2016, 17:38
zitieren

Hallo Leute!

Wer erst kürzlich von c auf c++ umgestiegen ist und mit Dateien experimentiert, in dem Zahlen
als Bytes gespeichert sind, wird sich mit der Methode get etwas schwer tun, denn diese
liest nur Bytes aus einer Datei als signed char -Werte ein.

Hier einige selbstgeschriebene Funktionen die das Auslesen von Bytes als unsigend char-Werte
erlaubt und diese als integer-Wert zurück gibt.

zuerst aber einige Funktionen die hierbei nützlich sind:

#include <iostream>

using namespace std;


//Umwandlung von signed char zu int um
int atoint(char letter)
{
 int rewer;
 rewer = (int)letter;
 if ( rewer < 0)
  rewer += 256;
// printf("*%3d=%3d* ", rewer, letter);

 return rewer;
}
// Wandelt einein integer-Wert in char um
// -128char ist 128 uchar, -1char ist 255 uchar
char inttoa(int letter)
{
 char rewer;
 if ( letter > 127)
  rewer = letter - 256;
   else rewer = (int)letter;
 return rewer;
}

//Liest jeweils 4 Byte als einen integer Wert von einer Datei ein
int getint(fstream& quelle)
{
 int slei, teile[4], dummy;
 char zahl[4];

  slei = dummy = 0;
  for (slei = 0; slei <= 3; slei++)
   {
    if (!quelle.eof()) quelle.get(zahl[slei]);
     else break;
    teile[slei] = atoint(zahl[slei]);
   }
  dummy = FourintToint(teile);

return dummy;
}

// Schreibt einen bis zu 4-Byte langen integer-Wert in eine Datei
int putint(fstream& ziel, int zahl)
{
 unsigned char intteile[4];
 char letter;
 int slei, rewer;

 rewer = zahl;
  intzuchar(zahl, &intteile);
   for (slei = 0; slei <= 3; slei++)
    {
     letter = inttoa(intteile[slei]);
     ziel.put(letter);
    }
return rewer;
}
//Liest ein signed char ein, wandelt es in unsigend char um, Ausgabe als int
int getuchar(fstream& quelle)
{
 int dummy = 0;
 char letter;

 if (!quelle.eof())
 {
  quelle.get(letter);  // get kann nur signed char von Files lesen
  dummy = (int)letter;
  if ( dummy < 0)
   dummy += 256;
  dummy = atoint(letter);
 }

return dummy;
}

Hier nun ein Beispiel, diese Programm erstellt eine kleine Statistik über die Häufigkeit von
ASCII-Zeichen in einer Datei:

Zuerst die datei showfile.h:
#ifndef SHOWFILE_H_INCLUDED
#define SHOWFILE_H_INCLUDED

#include <fstream>

using namespace std;

int atoint(char letter);

#endif // SHOWFILE_H_INCLUDED

Nun das Hauptprogramm showfile.cpp:
#include <iostream>

using namespace std;

#include <iostream>
#include "showfile.h"
#include <iomanip>
#include <stdio.h>

int sz = 0;


//Liest ein signed char ein, wandelt es in unsigend char um, Ausgabe als int
int getuchar(fstream& quelle)
{
 int dummy = 0;
 char letter;

 if (!quelle.eof())
 {
  quelle.get(letter);  // get kann nur signed char von Files lesen
  dummy = (int)letter;
  if ( dummy < 0)
   dummy += 256;
  dummy = atoint(letter);
 }

return dummy;
}

int hauptmenue(void)
{
  int wohin = 2;
  cout << "\nDatei Statistik" << endl;
  cout << "\nBeenden..............1";
  cout << "\nDatei lesen..........2";
  cout << "\nStatistik zeigen.....3";
  cout << "\nIhre Wahl: ";
  cin >> wohin;
return wohin;
}


int main(void)
{
  fstream quelle;
  char dateiname[200];
  unsigned char buchsta;
  int zeimen, slei, zeichen[300];
  int wohin = 0, letter, maxletter;

do
switch(wohin)
 {
  default: wohin = hauptmenue();
           cout << "\nIhre Wahl: " << wohin;
        break;

  case 1 : return 0;
        break;

 case 2:
   cout << "\nBitte geben Sie den Dateinamen ein: ";
   cin >> dateiname;
   cout << endl;

  quelle.open(dateiname, ios_base::in);
  if (!quelle )
   {
    cout << "\nDatei konnte nicht geöffnet werden";
    return 0;
   }
  zeimen = 0;
  maxletter = 0;
  for (slei = 0; slei <= 255; slei++)
   zeichen[slei] = 0;

  while(!quelle.eof())
   {
    letter = getuchar(quelle);
    if (letter > maxletter) maxletter = letter;
    zeichen[letter]++;
    zeimen++;
   }

  quelle.close();
  cout << "\nDatei \n" << dateiname <<" geschlossen   Länge: " << zeimen << " Byte";
  cout << "\nHöchstes Zeichen: " << maxletter;
  wohin = 0;
  break;

case 3:
     cout << "\nZeige Dateistatistik";
      for (slei = 0; slei <= 255; slei++)
       {
        if ((slei >= 32) && (slei < 127))
         buchsta = slei;
          else buchsta = 32;
        cout << "\nZeichen " << buchsta << " Nr.: " << setw(3) << slei << "  Menge: " << setw(10) << zeichen[slei];
       }
      wohin = 0;
      break;

 }
while(wohin != 1);
return 0;
}
/***********************Ende Hauptprogramm***************************************/

//Umwandlung von signed char zu signed int um
int atoint(char letter)
{
 int rewer;
 rewer = (int)letter;
 if ( rewer < 0)
  rewer += 256;
// printf("*%3d=%3d* ", rewer, letter);

 return rewer;
}
Viel Spaß beim Testen Leute!
wünsche euch Guiseppe


pn
Gast 
19.01.2016, 17:38
zitieren

Mach mit!

Wenn Dir die Beiträge zum Thread "Selbsgeschriebene Funktion getint() und getuchar() liest Bytes aus Datei als int und unsigned char" gefallen haben oder Du noch Fragen hast oder Ergänzungen machen möchtest, solltest Du Dich gleich bei uns anmelden:



Registrierte Mitglieder genießen die folgenden Vorteile:
✔ kostenlose Mitgliedschaft
keine Werbung
✔ direkter Austausch mit Gleichgesinnten
✔ neue Fragen stellen oder Diskussionen starten
✔ schnelle Hilfe bei Problemen
✔ Bilder und Videos hochladen
✔ und vieles mehr...


Neuen Thread eröffnenNeue Antwort erstellen
Ähnliche BeiträgeRe:
Letzter Beitrag
 Was bewirkt --> unsigned char (void)
Hallo zusammen, habe eine Aufgabe im Anhang und kann sie nicht wirklich lösen. unsigned char (void) .Kann mir jemand verraten was void bewirkt, wenn es in den Klammern steht? Das es keinen Funktionswert zurückgibt, wenn es vor der Klammer steht weiß...
[C]von Plagiat
1
1.442
01.09.2021, 09:07
Guiseppe
Datei Hochladen - Datei beschädigt oder falsche Erweiterung
Wenn ich versuche eine Word-Datei (doc oder docx) hochzuladen erscheint folgende Fehlermeldung: "Die Datei ist beschädigt oder hat eine falsche Datei-Erweiterung. Bitte überprüfe die Datei und wiederhole den Hochlade-Vorgang." Der Dateityp...
von Zotzi
0
1.659
09.07.2010, 11:43
Zotzi
Spezielle Frage über Bytes
Ich hätte folgende Frage: Nehmen wir an, dass mein Arbeitsspeicher eine Kapazität von 1 GB hat (das sind 1.073.741.824 Bytes), heißt das, dass es auch genauso viele Speicheradressen gibt wie die Anzahl der Bytes? Zusätzliche Frage über Pointer: Warum...
[C]von kenyaboy42
0
290
04.09.2010, 17:30
kenyaboy42
CD-Wechsler liest kein CDs
Hallo, wollte mir demnächst ein Honda Fr v 2.0 Benzin mit LPG Gas kaufen. da leider die cd wechsler kein cds liest und wahrscheinlich auch der Navigation nicht geht. Kann jemand mir helfen? Kann man den Cd-Wechsler reparieren? Wenn ja was kostet...
von montada1212
0
411
10.02.2013, 10:28
montada1212
[.DOC]Was man so alles im Chat liest ...
Sind ein paar gute Dinge bei...
von CTR_Thorsten
9
762
02.07.2005, 00:23
Mattes
Wo liest man beim EP2 den Kühlwasserstand ab?
Hey, ist zwar jetzt ne superblöde Frage, aber ich hab´s trotz intensivem Googeln und Lesen der Bedienungsanleitung immer noch nicht raus. Wo liest man beim Civic EP2 den Kühlwasserstand ab? Ich find da keine Aufschrift für Min. und Max. auf dem...
von Diablo81
4
649
29.08.2009, 20:59
Diablo81
ps3 60 gb liest kein spiel mehr
hi hab ein problem unter spiellen ist das spiel hängen geblieben und seit dem leist sie keine spiele mehr hab scho im internet geschaut aber nichts gefunden auser das ylod aber das hab ich nicht geht ganz normal an danke für hilfe mfg...
von fewa1860
2
438
29.12.2010, 18:01
.meThoD.geR.
DVD Brenner liest nichts mehr
Nabend! Mein DVD Brenner liest keinen einzigen Silberling mehr, egal ob CD oder DVD. Das Bs ist neu drauf und es bestehen keine Hardware Konflikte. Vor der Neuinstallation hat er mal zwischendurch funktioniert.Erkannt wird das Laufwerk...
von Zachan
16
717
22.12.2007, 16:47
Zachan
dvd laufwerk liest keine dvd mehr
da kommt immer wen ich ne dvd rein schiebe * diese dvd ist kopiergeschützt und kann nicht abgespielt werden * hat jemand ne idee wie ich das umgehen kann? mit mein alten laufwerk ging alles ohne probleme nur das ist putt und das neue macht jetzt nur...
von dbmaster
6
953
22.10.2007, 19:46
Electric
CD/MP3 Player liest keine CDs mehr ! :(
hi seit ner zeit streikt mein cd player ( JVC DK-LH3101 ) :( egal ob original ,gebrannt MP3 oder sonst was .. auch mit ner reinigungs CD hab ich es versucht nimmt er auch nicht an .nachdem ich eine CD rein schieb versucht er krampfhaft sie zu...
von _TIGER_
5
2.807
28.05.2008, 09:17
peterdacn
© 2004 - 2025 www.programmierer-forum.de | Communities | Impressum |