Re: how to convert a decimal text to binary text with mfc ?
On Dec 16, 1:57 pm, Mehdi <med.anoo...@gmail.com> wrote:
I want to create a text editor something like HEX editor in which it
can open text file and display text in binary or decimal or hex.
i did it but it's very slow exactly when it is converting to binary.
char binary[33];
int integer = 0;
for(int i=0 ; i < source.GetLength() ; i++)
{
integer = source[i];
_itoa(integer, binary, 2);
result += binary;
result += " . ";
}
what should i do? why is that so time consuming?
As you know there are many applications like Hex Editor Neo that
convert decimal to binary in a second.
what causes this significant difference?
At first glance, you have excessive re-allocation in result+=binary
and += ".". Since you know the length of your source, and since an int
has 32 bits (on VC, but you should not be using an int, but rather a
type that has exact bitness irregardless of compiler/platform), you
can pre-calculate how much space you need (e.g. you need a buffer of
source.GetLength()*(32+1) characters) and then just fill it. Also,
_itot is a bit too generic for your needs, perhaps dumb bit-twiddling
is faster.
E.g.
// Warning: never use code you see on the internet
// Warning: compiled with head-compiler and debugge with head-
debugger.
size_t binItemSize = sizeof(source[0])*8 + _tcslen(_T(".")); //
Presume 8-bit datums :-)
CString result;
LPTSTR pResult = result.GetBuffer(binItemSize*source.GetSize() + 1);
for(int i=0 ; i < source.GetLength() ; i++)
{
integer = source[i];
for (int j=0; j<sizeof(source[i])*8; j++)
{
*pResult = '0' + integer&1;
pResult++;
integer >> 1;
}
*pResult = " . ";
pResult++;
}
*pResult = 0;
result.ReleaseBuffer();
HTH,
Goran.