Δημοσιεύτηκε: 10 Δεκ 2008, 22:05
από simosx
gyros έγραψε:Προσπάθησα να βάλω στο αρχικό ποστ μια φωτογραφία από τον φλοιό από την μεταγλώττιση και την εκτέλεση του κώδικα που έδωσα. Το λάθος γίνεται με την δήλωση της μεταβλητής CRC. Την δηλώνω long long int και ο compiler μου την καταχωρεί ως να είναι απλά long int και έτσι χάνεται κάποια πληροφορία. Αυτό που προσπαθώ να κάνω είναι να μπορέσω να φτιάξω μια συνάρτηση για να εκτυπώνει στην οθόνη έναν ακέραιο ή δεκαεξαδικό στην οθόνη σε δυαδική μορφή και χωρισμένη σε 8άδες bit. Η συνάρτηση δουλεύει ή για να είμαστε και ακριβείς φαίνεται να δουλεύει. Το θέμα είναι ότι για την δουλειά που το θέλω εγώ θέλω να χρησιμοποιήσω ακέραιους πάνω από 4-byte, το long long int προσφέρει 8. Και το θέμα είναι ότι τον δεκαεξαδικό που αρχικοποιώ στην CRC θέλει 5 -bytes. Και ενώ θεωρητικά θα έπρεπε να αποθηκευτεί ολόκληρος, αποθηκεύονται μόνο τα πρώτα 4 byte του δεκαεξαδικού. ως να ήταν απλώς long int η μεταβλητή CRC. Ελπίζω να έγινα κατατοπιστικότερος.


Τώρα κατάλαβα.
Το ζήτημα είναι με το μεταγλωττιστή.
Αντί για

long long int CRC = 0x104C11DB7;
πρέπει να γράψεις
long long int CRC = 0x104C11DB7L;

Δηλαδή, αν μια σταθερά είναι long, βάζεις ένα L στο τέλος της. Για unsigned long, βάζεις UL κτλ.
Μιας και long, long long είναι το ίδιο, αρκεί να το αφήσεις ως long.