kalindriv
28-06-2007, 23:25
Ciao ragazzi,
ho un problema stupido stupido, ma non so come risolverlo. C'è qualcuno che può darmi una mano?
io ho una stringa (letta da un file) così fatta: "0x00000049 13 0". Io devo leggere il primo numero esadecimale, modificarlo (chessò, ad esempio sottraendo 1) e poi ricreare l'esadecimale nella stessa forma. Posto il cuore del codice che ho realizzato: :read:
#include <cstdio>
#include <cstdlib>
#include <iostream>
using namespace std;
#define DELIMITER " "
int main(){
char str[] = "0x00000049 13 0";
char *pch;
char *str2hex;
long int pos;
long int pos_modificato;
cout << "La stringa originale è : " << str << endl;
pch = strtok(str, DELIMITER);
pos = strtol(str, NULL, 16);
pos_modificato = pos-1;
cout << "La stringa estratta è : " << pch << endl;
cout << "In interi vale : " << pos << endl;
cout << "Il valore cercato è (sottraendo 1) :" << pos_modificato << endl;
cout << "che in esadecimale diventa : ";
cout.flags ( ios::hex | ios::showbase );
cout << pos_modificato << endl;
cout.flags ( ios::dec );
return 0;
}
L'output del programmino è : :read:
La stringa originale è : 0x00000049 13 0
La stringa estratta è : 0x00000049
In interi vale : 73
Il valore cercato è (sottraendo 1) :72
che in esadecimale diventa : 0x48
come vedete il risultato ultimo è 0x48. Mentre io vorrei che mi stampasse 0x00000048 !! Avete capito il problema? Mi serve assolutamente perchè devo rispettare delle specifiche del file sorgente!
ll problema somiglia tanto alla precisione del numero da stampare, ma in effetti non è questione di troncare, ma visualizzare il risultato su più cifre!
Ho provato con setprecision() o precision(), ma non mi sono sembrati d'aiuto!
Riuscite ad aiutarmi? :help:
ho un problema stupido stupido, ma non so come risolverlo. C'è qualcuno che può darmi una mano?
io ho una stringa (letta da un file) così fatta: "0x00000049 13 0". Io devo leggere il primo numero esadecimale, modificarlo (chessò, ad esempio sottraendo 1) e poi ricreare l'esadecimale nella stessa forma. Posto il cuore del codice che ho realizzato: :read:
#include <cstdio>
#include <cstdlib>
#include <iostream>
using namespace std;
#define DELIMITER " "
int main(){
char str[] = "0x00000049 13 0";
char *pch;
char *str2hex;
long int pos;
long int pos_modificato;
cout << "La stringa originale è : " << str << endl;
pch = strtok(str, DELIMITER);
pos = strtol(str, NULL, 16);
pos_modificato = pos-1;
cout << "La stringa estratta è : " << pch << endl;
cout << "In interi vale : " << pos << endl;
cout << "Il valore cercato è (sottraendo 1) :" << pos_modificato << endl;
cout << "che in esadecimale diventa : ";
cout.flags ( ios::hex | ios::showbase );
cout << pos_modificato << endl;
cout.flags ( ios::dec );
return 0;
}
L'output del programmino è : :read:
La stringa originale è : 0x00000049 13 0
La stringa estratta è : 0x00000049
In interi vale : 73
Il valore cercato è (sottraendo 1) :72
che in esadecimale diventa : 0x48
come vedete il risultato ultimo è 0x48. Mentre io vorrei che mi stampasse 0x00000048 !! Avete capito il problema? Mi serve assolutamente perchè devo rispettare delle specifiche del file sorgente!
ll problema somiglia tanto alla precisione del numero da stampare, ma in effetti non è questione di troncare, ma visualizzare il risultato su più cifre!
Ho provato con setprecision() o precision(), ma non mi sono sembrati d'aiuto!
Riuscite ad aiutarmi? :help: