Click to See Complete Forum and Search --> : Hex to Bin


May 12th, 1999, 11:39 AM
Hi,
I need to convert hex to binary. If u know any functions in MFC or other please reply.

Thanks

Normen Müller
May 16th, 1999, 09:19 AM
Hi!

Hope this little code sample will carry you on....

void main( int argc, char** argv )
{
char *hex = argv[1];
char *bin = (char *)calloc(1, sizeof(char));
char *pr = (char *)calloc(32, sizeof(char));

while(int i = 0 < (int)strlen(hex))
{
int itmp = 0;
char ctmp = hex[i];
if(ctmp == 'A') itmp = 10;
else if(ctmp == 'B') itmp = 11;
else if(ctmp == 'C') itmp = 12;
else if(ctmp == 'D') itmp = 13;
else if(ctmp == 'E') itmp = 14;
else if(ctmp == 'F') itmp = 15;
else if(ctmp == '9') itmp = 9;
else if(ctmp == '8') itmp = 8;
else if(ctmp == '7') itmp = 7;
else if(ctmp == '6') itmp = 6;
else if(ctmp == '5') itmp = 5;
else if(ctmp == '4') itmp = 4;
else if(ctmp == '3') itmp = 3;
else if(ctmp == '2') itmp = 2;
else if(ctmp == '1') itmp = 1;
else if(ctmp == '0') itmp = 0;

int ii = 1;
for(; ii <=4; bin = strcat(&bin[i], ((itmp & 1) == 1) ? "1" : "0"), itmp >>= 1, ii++ );
ii = 0 + (i*4);
for(int r = strlen(bin)-1; r>=0; pr[ii++] = bin[r], r--);
i++;
}
free (hex); free (bin); free (pr);
cout << pr;
}

apartis AG http://www.apartis.de
Normen Mueller

sally
May 17th, 1999, 04:28 AM
CString CSomeClass::SomeFunction(const CString& instr)
{
CString outStr;
const int len = instr.GetLength();
for (int i = 0; i < len; ++len )
{
CString tempStr;
switch (outStr[i])
{
case '0' : tempStr = "0000"; break;
case '1' : tempStr = "0001"; break;
case '2' : tempStr = "0010"; break;
case '3' : tempStr = "0011"; break;
case '4' : tempStr = "0100"; break;
case '5' : tempStr = "0101"; break;
case '6' : tempStr = "0110"; break;
case '7' : tempStr = "0111"; break;
case '8' : tempStr = "1000"; break;
case '9' : tempStr = "1001"; break;
case 'a' :
case 'A' : tempStr = "1010"; break;
case 'b' :
case 'B' : tempStr = "1011"; break;
case 'c' :
case 'C' : tempStr = "1100"; break;
case 'd' :
case 'D' : tempStr = "1101"; break;
case 'e' :
case 'E' : tempStr = "1110"; break;
case 'f' :
case 'F' : tempStr = "1111"; break;
}
outStr += tempStr;
}
return outStr;
}

Sally
May 17th, 1999, 04:28 AM
CString CSomeClass::SomeFunction(const CString& instr)
{
CString outStr;
const int len = instr.GetLength();
for (int i = 0; i < len; ++len )
{
CString tempStr;
switch (outStr[i])
{
case '0' : tempStr = "0000"; break;
case '1' : tempStr = "0001"; break;
case '2' : tempStr = "0010"; break;
case '3' : tempStr = "0011"; break;
case '4' : tempStr = "0100"; break;
case '5' : tempStr = "0101"; break;
case '6' : tempStr = "0110"; break;
case '7' : tempStr = "0111"; break;
case '8' : tempStr = "1000"; break;
case '9' : tempStr = "1001"; break;
case 'a' :
case 'A' : tempStr = "1010"; break;
case 'b' :
case 'B' : tempStr = "1011"; break;
case 'c' :
case 'C' : tempStr = "1100"; break;
case 'd' :
case 'D' : tempStr = "1101"; break;
case 'e' :
case 'E' : tempStr = "1110"; break;
case 'f' :
case 'F' : tempStr = "1111"; break;
}
outStr += tempStr;
}
return outStr;
}

sally
May 17th, 1999, 04:39 AM
CString CSomeClass::SomeFunction(const CString& instr)
{
CString outStr;
const int len = instr.GetLength();
for (int i = 0; i < len; ++len )
{
int num = 0;
const char ch = instr.GetAt(i);
if (ch >= '0' && ch <= '9')
num = ch - '0';
else if (ch >= 'A' && ch <= 'F')
num = ch - 'A' + 10;
else if (ch >= 'a' && ch <= 'f')
num = ch - 'a' + 10;
char buffer[256];
const CString tempStr(::_ltoa(num, buffer, 2));
outStr += tempStr;
}
return outStr;
}

Sally
May 17th, 1999, 04:39 AM
CString CSomeClass::SomeFunction(const CString& instr)
{
CString outStr;
const int len = instr.GetLength();
for (int i = 0; i < len; ++len )
{
int num = 0;
const char ch = instr.GetAt(i);
if (ch >= '0' && ch <= '9')
num = ch - '0';
else if (ch >= 'A' && ch <= 'F')
num = ch - 'A' + 10;
else if (ch >= 'a' && ch <= 'f')
num = ch - 'a' + 10;
char buffer[256];
const CString tempStr(::_ltoa(num, buffer, 2));
outStr += tempStr;
}
return outStr;
}

Jason Teagle
May 17th, 1999, 04:54 AM
---
CString strHexDigits("0123456789ABCDEF");
CString strBinaryNibbles[16] = {"0000","0001","0010","0011",
"0100","0101","0110","0111",
"1000","1001","1010","1011",
"1100","1101","1110","1111"};

CString HexToBinary(CString strHex)
{
// This assumes the supplied string contains no prefix, only raw hex digits.

char cDigit ;
CString strBinary("");
int n, iLength, iIndex ;

strHex.MakeUpper();
iLength = strHex.GetLength();
for (n = 0 ; n < iLength ; n++)
{
cDigit = strHex[n];
iIndex = strHexDigits.Find(cDigit);
if (iIndex == -1)
{
strBinary = "Illegal hex digit (";
strBinary += cDigit ;
strBinary += ").";
break ;
}
else
strBinary += strBinaryNibbles[iIndex];
}

return strBinary ;
}

CString BinaryToHex(CString strBinary)
{
// This assumes the supplied string contains no prefix, only raw binary digits.

CString strHex(""), strNibble ;
int n, iLength, iTargetLength, iIndex ;

iLength = strBinary.GetLength();
// Pad to the left to make a multiple of four digits.
iTargetLength = ( (iLength + 3) & (~0x0003) );
while (iLength < iTargetLength)
{
strBinary = "0" + strBinary ;
iLength++ ;
}

for (n = 0 ; n < iLength ; n += 4)
{
strNibble = strBinary.Mid(n, 4);
for (iIndex = 0 ; iIndex < 16 ; iIndex++)
{
if (strBinaryNibbles[iIndex] == strNibble)
break ;
}

if (iIndex == 16) // Loop ran to the end.
{
strHex = "Illegal binary nibble (" + strNibble + ").";
break ;
}
else
strHex += strHexDigits[iIndex];
}

return strHex ;
}


---

How's that?

Normen Müller
May 17th, 1999, 05:53 AM
Sorry, but I think that does not work.

const int len = instr.GetLength(); -> l-value specifies const object
switch (outStr) -> switch expression of type 'class CString' is illegal
and further on, what value does the variable outStr has at the beginning?

The idea itself is quite good and much more efficient than my one, but I did not want to use the MFC.

Thanx for your comment
Normen

--
apartis AG http://www.apartis.de
Normen Mueller

sally
May 17th, 1999, 06:59 AM
There are many ways....
Let me comment on the comments.



const int len = instr.GetLength(); // nothing wrong here, I am just telling all that I do not intend to change len
switch(outStr) // is a BAD typing mistake, and should have been switch(instr.GetAt(i)) . I appologise
CString outstr; // calls the default constructor, whch initialises outstr to an empty string, power uf OO





Thanks for your comments...

Sally

Sally
May 17th, 1999, 06:59 AM
There are many ways....
Let me comment on the comments.



const int len = instr.GetLength(); // nothing wrong here, I am just telling all that I do not intend to change len
switch(outStr) // is a BAD typing mistake, and should have been switch(instr.GetAt(i)) . I appologise
CString outstr; // calls the default constructor, whch initialises outstr to an empty string, power uf OO





Thanks for your comments...

Sally

Normen Müller
May 17th, 1999, 07:14 AM
OK, you are right, but

// nothing wrong here, I am just telling all that I do not intend to change len
const int len = instr.GetLength(); // What's about your for-statement?
// is a BAD typing mistake, and should have been switch(instr.GetAt(i)) . I appologise
switch(outStr) // I also thought, that it was just a typing error
// calls the default constructor, whch initialises outstr to an empty string, power uf OO
CString outstr; // Ups...




--
apartis AG http://www.apartis.de
Normen Mueller

sally
May 19th, 1999, 03:00 AM
const int len = instr.GetLength();
for (int i = 0; i < len; ++len )

// in the for statement:
// 'i' is the 'stear'-variable and can not be const for obvious reasons
// 'len' is part of the end test condition, and can be a const expression

// I could have written it all this way:

for (int i = 0; i < instr.GetLength(); ++len )

// here, you can see that the end test condition is a rather constant value





Thanks for nickpicking on my code, I appreciate all the help I can get
and if something is wrong, I really like to know... Again, thanks

Sally

Sally
May 19th, 1999, 03:00 AM
const int len = instr.GetLength();
for (int i = 0; i < len; ++len )

// in the for statement:
// 'i' is the 'stear'-variable and can not be const for obvious reasons
// 'len' is part of the end test condition, and can be a const expression

// I could have written it all this way:

for (int i = 0; i < instr.GetLength(); ++len )

// here, you can see that the end test condition is a rather constant value





Thanks for nickpicking on my code, I appreciate all the help I can get
and if something is wrong, I really like to know... Again, thanks

Sally

Normen Müller
May 19th, 1999, 06:02 AM
You are welcome and I hope we'll stay in contact for further questions.
May be you could send me your email address as a part of a private message, because I think it is very good to have many persons to turn to relating to developers stuff...

Bye
Normen

--
apartis AG http://www.apartis.de
Normen Mueller