|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Sep 2006
Messaggi: 13
|
[C++] Scrittura Esadecimale con più cifre
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: ![]() Codice:
#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; } ![]() Codice:
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 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? ![]() |
![]() |
![]() |
![]() |
#2 |
Junior Member
Iscritto dal: Sep 2006
Messaggi: 13
|
praticamente, se dovessi scriverlo in C scriverei
Codice:
printf("0x%08x\n", pos_modificato); |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2774
|
Sostituisci il cout.flags che hai con questo:
Codice:
cout.flags ( ios::hex | ios::showbase | ios::internal); cout.width(10); cout.fill('0'); http://www.cplusplus.com/reference/iostream/iostream/ |
![]() |
![]() |
![]() |
#4 |
Junior Member
Iscritto dal: Sep 2006
Messaggi: 13
|
Grazie mille!! In effetti anche io ho cercato sulle stesse pagine, e forse il fill è l'unica cosa che non ho provato perchè pensavo mi scrivesse 00000x48 o cose simili!!
![]() Ora ho la certezza che tutto quello che si può far econ pritf e compari si può fare anche con C++!! |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2774
|
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 03:12.