Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Prg. schreiben,dass die EBCDIC Zeichen in Hex darstellt

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
16.12.2017, 21:25 Uhr
Dennis89



Hey und guten Abend,

ich bin auf der Suche nach Antworten auf dieses Forum gestoßen, da ich aber mit der Sufu keine Treffe hatte, wollte ich euch mal direkt fragen ob ihr mir helfen könnt ?

Erst mal bin ich Maschinenbau-Student und wir haben in den ersten zwei Semestern Informatik. Ich habe richtig "Glück" mit meinem Professor, der setzt nämlich Wissen voraus, das keiner ohne eine Informatik-Vergangenheit haben kann

Nun habe ich mir ein Buch über C++ Programmierung besorgt und dadurch auch schon gelernt wie man kleiner Programme schreibt, ein Taschenrechner oder die Verwendung vom Horner Schema.

Wir müssen jetzt ein C++ Programm schreiben, das einen normalen Text mit den EBCDIC Zeichen in Hexadezimal Zahlen ausgibt und ich habe absolut keine Ahnung wie ich das anstellen soll

Hier mal die originale Aufgabenstellung:

"Das Programm sollte zum Beispiel folgendes machen "Dieses Kapitel ist einfach" in Hexadezimal umwandeln. Das Programm soll allgemein sein und codiert alle Charakter gemäß EBCDIC vollständiger Tabelle"


Ich erwarte jetzt nicht das ich hier ein fertiges Programm bekomme (wäre schon ok ), aber vielleicht mal ein paar Gedankenanstlöße, wie ich so etwas hinbekommen könnte.


Tausend Dank im Vorraus !

Grüße Dennis
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
16.12.2017, 23:37 Uhr
prinz



Hallo Dennis,

ich würde die EBCDIC-Tabelle in einem zweidimensionalen char-Array abspeichern z.B.:
char ebcdic[16][16];
Dabei entsprechen die Indexzahlen des Arrays der Hexacodierung, also [15][15] wäre FF oder [1][11] wäre 1B oder [0][4] wäre 04 oder [0][12] wäre 0C, usw.

Nun musst du die zweidimensionale array-variabele mit dem entsprechenden Code der EBCDIC-Tabelle initialisieren. Das ist wohl der größte Teil der Arbeit z.B. ebcdic[8][1] = 'a'.

Dann kannst du den eingelesenen String, der umgewandelt werden soll z.B. "Dieses Kapitel ist einfach" Buchstaben für Buchstaben mit der zweidimensionalen Tabelle vergleichen.

Das würde ich mit einer doppelt ineinander verschachtelten For-Schleife erledigen z.B.:

C++:
for (x=0; x < 16; x++)
{    for (y = 0; y < 16; y++)
     {   Wenn Buchstabe == ebcdic[x][y] Dann Ausgabe(x, y) ...


Bei der Ausgabe muss du natürlich noch die Indexwerte 10 bis 15 durch die Buchstaben A bis F ersetzten. Das kannst du ja mit einer Funktion machen.

Ich hoffe, dass ich dir eine Anregung geben konnte.

Gruß,
prinz
-----
Edit: cpp-Tags eingesetzt.

Dieser Post wurde am 17.12.2017 um 00:25 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
16.12.2017, 23:57 Uhr
Dennis89



Hey Prinz,

vielen Dank für deine schnelle Antwort !

Ich werde es morgen mal versuchen


Grüße Dennis
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
17.12.2017, 18:26 Uhr
ao

(Operator)



Zitat von prinz:
Nun musst du die zweidimensionale array-variabele mit dem entsprechenden Code der EBCDIC-Tabelle initialisieren. Das ist wohl der größte Teil der Arbeit z.B. ebcdic[8][1] = 'a'.

Dann kannst du den eingelesenen String, der umgewandelt werden soll z.B. "Dieses Kapitel ist einfach" Buchstaben für Buchstaben mit der zweidimensionalen Tabelle vergleichen.

Das würde ich mit einer doppelt ineinander verschachtelten For-Schleife erledigen z.B.:

Das ist so ungefähr der umständlichste Weg, den es gibt.

Erstens kann man die Tabelle gleich beim Deklarieren initialisieren, dann kann man sich die Tipperei mit ebcdic[x][y] = 'a'; sparen. Man schreibt also sowas wie

C++:
const char ebcdic[16][16] =
{
    { 0x00, 0x01, 0x02, 0x03, 0x85, 0x09, 0x86, 0x7f, 0x87, 0x8d, 0x8e, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
    { 0x10, 0x11, 0x12, 0x13, 0x8f, 0x0a, 0x08, 0x97  /* und so weiter */
};


Das ist zwar auch reichlich langweilig, aber immer noch besser, als jedes Tabellenfeld einzeln zu indizieren und zuzuweisen. So ne Strafe haben nicht mal Maschbauer verdient

Zweitens kann man statt einer 16x16-Tabelle auch eine 1x256-Tabelle verwenden und einfach eine der tausend ebcdic-to-ascii-Tabellen herunterladen, die es im Internet gibt, gleich fix und fertig in C-Syntax.

Drittens kann man sich die Tabellen-Rückwärtssuche per Schleife schenken, indem man gleich die inverse Tabelle verwendet, nämlich ascii-to-ebcdic. Gibts genauso zum Download, und man greift einfach mit dem Ascii-Zeichen als Index in die Tabelle rein und kriegt den zugehörigen EBCDIC-Code raus.

Dieser Post wurde am 17.12.2017 um 18:40 Uhr von ao editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
17.12.2017, 21:50 Uhr
Dennis89



Hey und vielen Dank für deine Antwort und dafür dass du die Maschinenbauer verschonen willst

Ich habe jetzt eine Tabelle gefunden in der steht zum Beispiel drin das 'A' in Ascii 41 ist und in Ebcdic ist es ein C1. Hab dann jetzt mal eine Tabelle zur besseren Übersicht in Exel erstellt und zwar 1X256 mit allen Zeichen und darunter eine zweite Tabelle, in der steht als was jedes Zeichen ausgegeben werden soll.

z.B ist X1 = 0

Wie bekomme ich diese Tabelle jetzt aber definiert in mein Programm ?

Ich werde aus dem Beispiel oben leider nicht schlau, ich habe auch wie gesagt, leider keine Programmiererfahrung, auch wenn ich zugeben muss, das ich es interessant finde


Grüße Dennis
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
18.12.2017, 21:27 Uhr
ao

(Operator)


Kannst du denn mit dem, was prinz vorschlägt, mehr anfangen? Dann mach es so, falsch ist es nicht.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
18.12.2017, 21:58 Uhr
Dennis89



Ich weis was man mir sagen will, aber ich weis nicht wie ich es umsetzen muss

Ich schreibe also:

char ebcdic[16][16] ={{};
{}};

Wie muss ich das in die Klammern schreiben ?

wenn ich jetzt in die Klammern die unterschiedlichen Zeichen der EBCDIC Tabelle schreibe, dann bekomme ich eine Fehlermeldung.

Ich hab ein dickes Brett vor dem Kopf.


Grüße Dennis

Dieser Post wurde am 18.12.2017 um 22:42 Uhr von Dennis89 editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
18.12.2017, 23:24 Uhr
Dennis89



Kann meinen vorherigen Post nicht mehr bearbeiten, aber ich bin jetzt soweit:

#include <iostream>
#include <string>

using namespace std;

int main ()
{


string Ascii[] = {"4B" ,"4C" ,"4D" ,"4F", "/0" };

cout << Ascii[2] << endl;

}

Das war jetzt zum testen, weil sich bei mir sonst immer so viele Fehler anhäufen und ich die dann nicht mehr finde

Ist das soweit richtig ? Also mal abgesehen davon dass die restlichen Hex Zahlen noch fehlen.

Wie funktioniert denn genau diese Schleife, damit das Programm die eingegebenen Buchstaben mit der Tabelle vergleicht und die richtige Zahl dann ausgibt ?


Vielen Dank für eure Hilfe bist jetzt

Grüße Dennis
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: