Προς το περιεχόμενο

Hex τιμή σε string και αντίστροφα?


SpyrosR

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα.

 

Έχω μια δεκαεξαδική τιμή και θέλω να την μετατρέψω σε char. Δε θέλω τη "μετάφραση" της τιμής (π.χ. 0x74657374 = "test") αλλά μετατροπή του τύπου και μόνο, δηλαδή από το int να πάρω ένα string με το περιεχόμενο της προηγούμενης. Σα να έκανα δηλαδή str = "0x74657374";. Δε ξέρω αν το εκφράζω σωστά.

 

Και το αντίστροφο, δηλαδή από ένα string με την τιμή να το μετατρέπω σε int.

 

Έχουμε καμιά ιδέα; Ψάχνωντας στο Google βρήκα διάφορα, αλλά κανένα δεν είχε το επιθμητό (ή έστω κοντινό) αποτέλεσμα. Σε PHP αν θυμάμαι καλά γίνεται, οπότε και σε C++ που θέλω εγώ.

 

Απλά ψάχνω το "πως". :P

Δημοσ.

Θα μπορούσες να φτιάξεις μια συνάρτηση που για κάθε χαρακτήρα του string να κάνει ένα άθροισμα των (16^i)*c (όπου i η θέση από αριστερά και c η δεκαεξαδική τιμή του κάθε χαρακτήρα) και μετά να αποθηκεύει το άθροισμα σε int.

 

Νυστάζω λίγο για να το διατυπώσω σε C και δεν είμαι σίγουρος κι αν είναι αυτό που ψάχνεις βέβαια...

Δημοσ.

@ 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!

Δημοσ.

Ένας εύκολος τρόπος να μετατρέψεις ένα 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;
}

 

Καλή συνέχεια.

Δημοσ.

Ευχαριστώ παιδιά. Μου λύσατε τα χέρια. :-)

 

Συγνώμη που δεν απάντησα νωρίτερα, αλλά αυτό τον καιρό είμαι λιγάκι στριμωγμένος από θέμα χρόνου (κι όχι μόνο χρόνου - μα τι να κάνουμε?). :P

Δημοσ.

Για λόγους πληρότητας μόνο, η 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();
}

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...