Σε αυτήν την άσκηση θα γράψουμε προγράμματα για την δεκαεξαδική κωδικοποίηση και αποκωδικοποίηση ενός κειμένου.
4.1 Δημιουργήστε ένα αρχείο κειμένου με όνομα text και πληκτρολογήστε σε αυτό ένα
τυχαίο κείμενο.
4.2 Γράψτε ένα πρόγραμμα encode.c που να διαβάζει από την είσοδο χαρακτήρες και,
για καθένα απ’ αυτούς, να εκτυπώνει στην έξοδο τον ASCII κωδικό που έχει σε δεκαεξαδική
μορφή χρησιμοποιώντας ακριβώς δύο ψηφία. Παράδειγμα εκτέλεσης ακολουθεί:
$ echo hello world | ./encode
68656c6c6f20776f726c640a
4.3 Εκτελέστε το πρόγραμμα encode με ανακατεύθυνση εισόδου από το αρχείο text.
4.4 Εκτελέστε το πρόγραμμα encode με ανακατεύθυνση εισόδου από το αρχείο text και
ανακατεύθυνση εξόδου στο αρχείο encoded_text.
4.5 Γράψτε ένα πρόγραμμα decode.c που να διαβάζει από την είσοδο τα δεκαεξαδικά
ψηφία για τον κάθε χαρακτήρα και για κάθε δύο από αυτά τα ψηφία να εκτυπώνει τον
χαρακτήρα που αντιστοιχεί σε αυτόν τον δεκαεξαδικό αριθμό. Παράδειγμα εκτέλεσης
ακολουθεί:
$ echo 68656c6c6f20776f726c640a | ./decode
hello world
Ο αριθμός 68 αντιστοιχεί στον χαρακτήρα 'h' κ.ο.κ. Για την αποκωδικοποίηση
συνιστούμε να χρησιμοποιήσετε την συνάρτηση getchar(). Αν το επιθυμείτε μπορείτε να
δοκιμάσετε και άλλες λύσεις όπως π.χ., την scanf("%2x", ...) αλλά μην ξεχάσετε να
αποθηκεύσετε το αποτέλεσμα σε μεταβλητή τύπου int (και να μεταγλωττίσετε με το flag
-Wall αλλιώς είναι πιθανό να σας ξεφύγουν διάφορα λαθάκια).
4.6 Μεταγλωττίστε το και εκτελέστε το με ανακατεύθυνση της εισόδου από το αρχείο
encoded_text.
4.7 Εκτελέστε το πρόγραμμα decode για την αποκωδικοποίηση ενός κωδικοποιημένου
κειμένου, έτσι ώστε να παίρνει την είσοδό του απ’ ευθείας από το πρόγραμμα encode, το
οποίο να καλείται έτσι ώστε να κωδικοποιεί το αρχείο text, χωρίς να χρησιμοποιήσετε το
ενδιάμεσο αρχείο encoded_text. Παράδειγμα εκτέλεσης ακολουθεί:
$ echo hello world | ./encode | ./decode
hello world
Για το encode, η printf με πλάτος πεδίου και μηδενικά μπροστά δίνει πάντα δύο
δεκαεξαδικά ψηφία. Για το decode με getchar, διαβάστε τα ψηφία ανά ζεύγη, μετατρέψτε
κάθε ψηφίο (0–9 ή a–f) στην τιμή του 0–15 και συνδυάστε τα
ως \(16 \cdot \text{πρώτο} + \text{δεύτερο}\). Σκεφτείτε τι κάνετε με την τελική αλλαγή γραμμής της
εισόδου, που δεν είναι δεκαεξαδικό ψηφίο.
Αριθμός στον οδηγό: Α9.14
(στο κεφάλαιο) ·
Μόνιμο αναγνωριστικό: lab-lab04-encode-decode ·
Σύνδεσμος: https://progintro.github.io/study/questions/labs/lab-lab04-encode-decode.html ·
Markdown (GitHub)