Sunteți pe pagina 1din 5

Lec\ia 3.

Conversia datelor
3.1. Obiectivul lec\iei

conversia datelor ]n format zecimal =i hexazecimal.

3.2. Resurse necesare

mediul integrat Visual C++2008.


capitolul 2 din curs (ENCPC_2.pdf).

3.3. Generarea proiectului


Se genereaz[ un proiect Lectia3.
Se modific[ proprietatea Text a formei ]n Conversia datelor.
Se adaug[ formei un obiect TextBox cu propriet[\ile:
Name: txtDec;
Font: Courier New, Font Style: Regular, Size: 12.
Se adaug[ formei un obiect TextBox cu propriet[\ile:
Name: txtHex;
Font: Courier New, Font Style: Regular, Size: 12.
Se adaug[ formei un obiect Button cu propriet[\ile:
Name: btnToHex;
Text: Conv. Hex.
Se adaug[ formei un obiect Button cu propriet[\ile:
Name: btnToDec;
Text: Conv. Dec.
Se adaug[ formei un obiect Button cu propriet[\ile:
Name: btnTest;
Text: Test.
Se adaug[ formei un obiect Button cu propriet[\ile:
Name: btnClear;
Text: Clear.
Fereastra Conversia datelor arat[ ca ]n figura 3.1.

Figura 3.1. Fereastra Conversia datelor.

L3.1

Lec\ia 1. Conversia datelor

3.4. Conversia datelor ]n formate de afi=are


}n sistemele de calcul, datele sunt memorate ]n format binar (]n baza 2). Acest format se nume=te
format intern sau format de reprezentare intern[.
Afi=area datelor pe dispozitivele de afi=are necesit[ conversia acestora ]ntr-un format de afi=are
(numit =i format extern).
Formatul de afi=are este un =ir de caractere ASCII ce con\ine codurile cifrelor care formeaz[
reprezentarea datei respective.
Cele mai utilizate formate de afi=are sunt:
formatul zecimal (]n baza 10);
formatul hexazecimal (]n baza 16)
formatul binar (]n baza 2).
3.4.1. Exemplul 1. Afi=area ]n zecimal =i hexazecimal
Se completeaz[ func\iile btnTest_Click() =i btnClear_Click() astfel:
/**********************************************************************************
Buton Test
Teste
**********************************************************************************/
private: System::Void btnTest_Click(System::Object^ sender, System::EventArgs^ e)
{
int n = 1234;
// Conversie din format intern (binar) in zecimal
txtDec->Text = n.ToString();
// Conversie din format intern in hexazecimal
txtHex->Text = n.ToString("X");
}//end btnTest_Click
/**********************************************************************************
Buton Clear
Sterge ferestrele text
**********************************************************************************/
private: System::Void btnClear_Click(System::Object^ sender, System::EventArgs^ e)
{
txtDec->Text = "";
txtHex->Text = "";
}//end btnClear_Click

Pentru conversie s-a folosit func\ia ToString().


Func\ia permite controlul formatului de afi=are pentru tipurile fundamentale de date.
Sintaxa func\iei este:
ToString(<sir format>)
]n care =ir format este de forma Ann, ]n care:
A este un caracter numit specificator de format (vezi tabelul 3.1);
nn este un ]ntreg (099) numit specificator de precizie.
Specificatorul de format este op\ional pentru reprezentarea zecimal[ a datelor de tip ]ntreg sau real.
Pentru afi=area ]n format hexazecimal, trebuie folosit specificatorul de format X.
Tabelul 3.1 prezint[ o selec\ie a specificatorilor de format standard. Pentru o list[ complet[ a
specificatorilor de format, utiliza\i help-ul mediului integrat VC++2008.
Experimenta\i, pe baza exemplului 1, afi=area datelor de tip ]ntreg sau real utiliz`nd diferite formate de
afi=are.

L3.2

Lec\ia 1. Conversia datelor


Specificator
de format

Nume

Descriere

D sau d

Zecimal

Formatul este utilizat numai pentru tipuri ]ntregi. Num[rul este


convertit ]ntr-un =ir de cifre zecimale (09). Specificatorul de precizie
indic[ numarul minim de cifre al reprezent[rii.

E sau e

Exponen\ial
(=tiin\ific sau
virgul[ mobil[)

Num[rul este convertit ]ntr-un =ir de forma (-)z.zzz...Ezzz ]n care


z este o cifr[ zecimal[. Este afi=at[ o cifr[ ]naintea punctului zecimal
=i un num[r de cifre dup[ punct, conform specificatorului de precizie.

F sau f

Virgul[ fix[

Num[rul este convertit ]ntr-un =ir de forma (-)zzz.zzz... ]n care z


este o cifr[ zecimal[. Specificatorul de precizie indic[ num[rul de cifre
dup[ punctul zecimal.

P sau p

Procent

Num[rul este convertit ]ntr-un =ir ce reprezint[ procente. }nainte de


conversie, num[rul este ]nmul\it cu 100. Specificatorul de precizie
indic[ num[rul de cifre dup[ punctul zecimal.

Hexazecimal

Formatul este utilizat numai pentru tipuri ]ntregi. Num[rul este


convertit ]ntr-un =ir de cifre hexazecimale (09, af pentru x sau AF
pentru X). Specificatorul de precizie indic[ numarul minim de cifre al
reprezent[rii.

X sau x

Tabelul 3.1. Specificatori de format standard (selec\ie).

3.5. Conversia din format de afi=are ]n format intern


}n anumite situa\ii avem nevoie de conversia invers[, din format de afi=are ]n format intern.
Pentru a realiza conversia din format ASCII zecimal ]n format intern, se completeaz[ func\ia
btnToHex_Click() astfel:
/**********************************************************************************
Buton Conv. Hex
Conversie zecimal->hexazecimal
**********************************************************************************/
private: System::Void btnToHex_Click(System::Object^ sender, System::EventArgs^ e)
{
unsigned int v;
if(txtDec->Text == "")
return;
// Conversie ASCII->binar
v = ::System::Convert::ToInt32(txtDec->Text);
// Conversie binar->ASCII hex
txtHex->Text = v.ToString("X");
}//end btnToHex_Click

Aceast[ func\ie utilizeaz[ valoarea din fereastra text txtDec ca dat[ de intrare pe care o afi=eaz[ ]n
fereastra txtHex ]n format hexazecimal.
Conversia se realizeaz[ ]n dou[ etape:
se converte=te con\inutul txtDec din ASCII zecimal ]n binar, utiliz`nd variabila v;
se converte=te valoarea lui v ]n ASCII hexazecimal =i se afi=eaz[ ]n txtHex.
Se compileaz[ =i se execut[ programul.
Se introduce, ]n fereastra text din st`nga, un num[r ]ntreg. La ap[sarea butonului Conv. Hex, ]n
fereastra din dreapta apare rezultatul conversiei ]n hexazecimal (fig. 3.2).

L3.3

Lec\ia 1. Conversia datelor

Figura 3.2. Conversia din zecimal ]n hexazecimal.


Pentru conversia din ASCII hex ]n zecimal, se completeaz[ func\ia btnToDec_Click() astfel:
/**********************************************************************************
Buton Conv. Dec
Conversie hexazecimal->zecimal
**********************************************************************************/
private: System::Void btnToDec_Click(System::Object^ sender, System::EventArgs^ e)
{
unsigned int v;
if(txtHex->Text == "")
return;
// Conversie ASCII hex->binar
v = StringToBin(txtHex->Text);
// Conversie in zecimal
txtDec->Text = v.ToString();
}//end btnToDec_Click

Se define=te func\ia utilizator StringToBin() astfel:


/****************************************************************************************
Function: unsigned int StringToBin(String^ s)
Conversie sir ASCII hex in binar
****************************************************************************************/
private: unsigned int StringToBin(String^ s)
{
unsigned int val, p;
unsigned char i;
wchar_t c;
val = 0;
p = 1;
for(i = 0; i < s->Length; i++)
{
c = s[s->Length - 1 - i];
if((c >= 'A') && (c <= 'F'))
{
c = 10 + (c - 'A');
}
else if((c >= 'a') && (c <= 'f'))
{
c = 10 + (c - 'a');
}
else
{
c = c - '0';
}
val += (c * p);
p *= 16;
}
return val;
}//end StringToBin

L3.4

Lec\ia 1. Conversia datelor


Conversia se realizeaz[ ]n dou[ etape:
se converte=te con\inutul txtHex din ASCII hex ]n binar, utiliz`nd variabila v =i func\ia
utilizator StringToBin();
se converte=te valoarea lui v ]n zecimal =i se afi=eaz[ ]n txtDec.
Se compileaz[ =i se execut[ programul.
Se introduce, ]n fereastra text din dreapta, un num[r ]n hexazecimal. La ap[sarea butonului Conv. Dec,
]n fereastra din st`nga apare rezultatul conversiei ]n zecimal (fig. 3.3).

Figura 3.3. Conversia din hexazecimal ]n zecimal.

L3.5