SpyrosR Δημοσ. 22 Σεπτεμβρίου 2008 Δημοσ. 22 Σεπτεμβρίου 2008 Καλησπέρα. Έχω μια δεκαεξαδική τιμή και θέλω να την μετατρέψω σε char. Δε θέλω τη "μετάφραση" της τιμής (π.χ. 0x74657374 = "test") αλλά μετατροπή του τύπου και μόνο, δηλαδή από το int να πάρω ένα string με το περιεχόμενο της προηγούμενης. Σα να έκανα δηλαδή str = "0x74657374";. Δε ξέρω αν το εκφράζω σωστά. Και το αντίστροφο, δηλαδή από ένα string με την τιμή να το μετατρέπω σε int. Έχουμε καμιά ιδέα; Ψάχνωντας στο Google βρήκα διάφορα, αλλά κανένα δεν είχε το επιθμητό (ή έστω κοντινό) αποτέλεσμα. Σε PHP αν θυμάμαι καλά γίνεται, οπότε και σε C++ που θέλω εγώ. Απλά ψάχνω το "πως".
teo64x Δημοσ. 23 Σεπτεμβρίου 2008 Δημοσ. 23 Σεπτεμβρίου 2008 Θα μπορούσες να φτιάξεις μια συνάρτηση που για κάθε χαρακτήρα του string να κάνει ένα άθροισμα των (16^i)*c (όπου i η θέση από αριστερά και c η δεκαεξαδική τιμή του κάθε χαρακτήρα) και μετά να αποθηκεύει το άθροισμα σε int. Νυστάζω λίγο για να το διατυπώσω σε C και δεν είμαι σίγουρος κι αν είναι αυτό που ψάχνεις βέβαια...
warchief Δημοσ. 23 Σεπτεμβρίου 2008 Δημοσ. 23 Σεπτεμβρίου 2008 @ Directx, αν γράφεις το παράδειγμα λίγο πριν κοιμηθείς γράφεις λίγο πολύπλοκα! Την σκευτόμουν πάλι σήμερα το πρωι στο μετρό την αρλούμπα μου (Οχι πως δεν ήταν σωστή, απλά σε πήγαινε Θεσσαλονίκη μέσω Πεκίνου) (και με secure copying, συμπληρώνω τον DirectX με #include <stdio.h> #include <string.h> #define BUFFER_LEN 64 int main(void) { int aNumber = 0xABCD01; char buffer[bUFFER_LEN]; // Zero out the buffer bzero(buffer, BUFFER_LEN); snprintf(buffer,(BUFFER_LEN > (2*sizeof(aNumber) + 1))?(2*sizeof(aNumber) + 1):BUFFER_LEN, "%X", aNumber); printf("Number says: %X\n", aNumber); printf("String says: %s\n", buffer); return 0; } Cheers!
Directx Δημοσ. 23 Σεπτεμβρίου 2008 Δημοσ. 23 Σεπτεμβρίου 2008 Ένας εύκολος τρόπος να μετατρέψεις ένα hexadecimal integer στο αντίστοιχο hexadecimal string του, είναι με την χρήση της stdio.h ρουτίνας sprintf η οποία γράφει με την μορφή που επιθυμούμε (πχ. %x) την μεταβλητή που θέλουμε (nHex) στο string (char-array καλύτερα σε C) μας (szHex). Η αντίστροφη διαδικασία, δηλαδή η μετατροπή ενός hexadecimal string σε integer μπορεί να γίνει με την χρήση της stdio.h ρουτίνας sscanf η οποία διαβάζει το περιεχόμενο μιας μεταβλητής (πχ. szHex) με την μορφή που επιθυμούμε (πχ. %x) αποθηκεύοντας το στην μεταβλητή που θέλουμε (nHex). Ακολουθεί κώδικας C γραμμένος σε CodeGear Turbo C++ Explorer: > /* * Convert nHex -> szHex and vice versa * Directx. */ #include <stdio.h> int main(int argc, char* argv[]) { int nHex = 0x74657374; char szHex[11]; /* store a number of 11 digits.. */ sprintf(szHex, "%x", nHex); printf("szHex: 0x%s\n", szHex); nHex = 0; sscanf(szHex, "%x", &nHex); printf("nHex: 0x%x\n", nHex); getchar(); return 0; } Καλή συνέχεια.
SpyrosR Δημοσ. 26 Σεπτεμβρίου 2008 Μέλος Δημοσ. 26 Σεπτεμβρίου 2008 Ευχαριστώ παιδιά. Μου λύσατε τα χέρια. Συγνώμη που δεν απάντησα νωρίτερα, αλλά αυτό τον καιρό είμαι λιγάκι στριμωγμένος από θέμα χρόνου (κι όχι μόνο χρόνου - μα τι να κάνουμε?).
bilco Δημοσ. 28 Σεπτεμβρίου 2008 Δημοσ. 28 Σεπτεμβρίου 2008 Για λόγους πληρότητας μόνο, η STL αντιμετώπιση του προβλήματος > #include <iostream> #include <sstream> using namespace std; // Μετατροπή string σε ακέραιο // s: string που περιέχει ακέραιο σε δεκαεξαδική μορφή // n: ακέραιος με αναφορά όπου θα επιστραφεί η τιμή από το string // Επιστρέφει false σε περίπτωση αποτυχίας bool hstos(string s, int& n) { stringstream ss(s); ss.flags(ios::hex); ss >> n; return !ss.fail(); } // Μετατροπή ακεραίου σε string σε δεκαεξαδική μορφή string itohs(int n) { stringstream ss; ss.flags(ios::hex); ss << n; return ss.str(); }
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.