char *ptr;
AnsiString ASCIICodeString = "";
AnsiString InitialStream = InitialStreamRichEdit->Text;
ptr=InitialStream.c_str();
while(*ptr)
{
for (int j=0;j<8;j++)
{
ASCIICodeString+=(char)(0x30+(*ptr&1));
*ptr>>=1;
}
ptr++;
}
Как БЫСТРО сконвертировать однобайтовое число в строковый побитовый эквивалент
Ну т.е. было 57 стало "111001" ("00111001")...
Мой вариант, где текст из RichEdit'а преобразуется в строку, стостоящую из нулей и единичек:
AnsiString InitialStream = InitialStreamRichEdit->Text;
int i = 1;
int ASCIICodeBitNumber, ASCIICodeBit;
AnsiString ASCIICodeString = "";
do
{
for (ASCIICodeBitNumber = 7; ASCIICodeBitNumber >= 0; ASCIICodeBitNumber--)
{
ASCIICodeBit = InitialStream;
ASCIICodeBit = ASCIICodeBit >> ASCIICodeBitNumber;
ASCIICodeBit = ASCIICodeBit & 1;
ASCIICodeString = ASCIICodeString + ASCIICodeBit;
}
i++;
}
while (i <= InitialStream.Length());
Цитата:
Originally posted by Slava_rec
Здорово, народ!!! Вот такая вот задача... Как БЫСТРО сконвертировать однобайтовое число (ASCII-код) в строковый эквивалент, записанный с помощью нулей и единиц...
Ну т.е. было 57 стало "111001" ("00111001")...
Мой вариант, где текст из RichEdit'а преобразуется в строку, стостоящую из нулей и единичек:
AnsiString InitialStream = InitialStreamRichEdit->Text;
int i = 1;
int ASCIICodeBitNumber, ASCIICodeBit;
AnsiString ASCIICodeString = "";
do
{
for (ASCIICodeBitNumber = 7; ASCIICodeBitNumber >= 0; ASCIICodeBitNumber--)
{
ASCIICodeBit = InitialStream;
ASCIICodeBit = ASCIICodeBit >> ASCIICodeBitNumber;
ASCIICodeBit = ASCIICodeBit & 1;
ASCIICodeString = ASCIICodeString + ASCIICodeBit;
}
i++;
}
while (i <= InitialStream.Length());
Здорово, народ!!! Вот такая вот задача... Как БЫСТРО сконвертировать однобайтовое число (ASCII-код) в строковый эквивалент, записанный с помощью нулей и единиц...
Ну т.е. было 57 стало "111001" ("00111001")...
Мой вариант, где текст из RichEdit'а преобразуется в строку, стостоящую из нулей и единичек:
AnsiString InitialStream = InitialStreamRichEdit->Text;
int i = 1;
int ASCIICodeBitNumber, ASCIICodeBit;
AnsiString ASCIICodeString = "";
do
{
for (ASCIICodeBitNumber = 7; ASCIICodeBitNumber >= 0; ASCIICodeBitNumber--)
{
ASCIICodeBit = InitialStream;
ASCIICodeBit = ASCIICodeBit >> ASCIICodeBitNumber;
ASCIICodeBit = ASCIICodeBit & 1;
ASCIICodeString = ASCIICodeString + ASCIICodeBit;
}
i++;
}
while (i <= InitialStream.Length());
Ну можно еще и так:
Код:
Цитата:
Originally posted by ddnh_bc
Ну можно еще и так:...
Ну можно еще и так:...
Первый код тотально не рабочий. Мин. 3 ошибки. Напр. ASCIICodeBit = ASCIICodeBit >> ASCIICodeBitNumber; после 4й итерации обнуляет любой ASCII код.
С твоим кодом все класс, за исключением того, что переводит в двоичный код в обратном порядке.
Код:
String kod[10] = { "00110000",
"00110001", "00110010", "00110011",
"00110100", "00110101", "00110110",
"00110111", "00111000", "00111001",
};
char *ptr;
AnsiString ASCIICodeString = "";
AnsiString InitialStream = InitialStreamRichEdit->Text;
ptr=InitialStream.c_str();
while(*ptr)
{
char c = *ptr;
if((c<='9')&&(c>='0'))
ASCIICodeString+=kod[c-0x30];
else
ASCIICodeString+=" ERROR ";
ptr++;
}
"00110001", "00110010", "00110011",
"00110100", "00110101", "00110110",
"00110111", "00111000", "00111001",
};
char *ptr;
AnsiString ASCIICodeString = "";
AnsiString InitialStream = InitialStreamRichEdit->Text;
ptr=InitialStream.c_str();
while(*ptr)
{
char c = *ptr;
if((c<='9')&&(c>='0'))
ASCIICodeString+=kod[c-0x30];
else
ASCIICodeString+=" ERROR ";
ptr++;
}
Мне нужно сконвертировать однобайтовое число, т.е. ASCII-код ЛЮБОГО символа, в его в строковый эквивалент... Я же ясно это написал!!!
Цитата:
Originally posted by Slava_rec
Мой код тотально рабочий!!! :D
Мне нужно сконвертировать однобайтовое число, т.е. ASCII-код ЛЮБОГО символа, в его в строковый эквивалент... Я же ясно это написал!!!
Мой код тотально рабочий!!! :D
Мне нужно сконвертировать однобайтовое число, т.е. ASCII-код ЛЮБОГО символа, в его в строковый эквивалент... Я же ясно это написал!!!
Да, ты прав. Я не заметил, что значение ASCIICodeBit каждый раз заново инициализируется в цикле.
Код:
AnsiString InitialStream=InitialStreamRichEdit->Text;
int i=1;
byte ASCIICodeBit;
AnsiString ASCIICodeString="";
do
{
ASCIICodeBit=InitialStream;
for(byte x=0x80;x>0;x=x>>1)
ASCIICodeString+=(ASCIICodeBit&x)?'1':'0';
i++;
}
while(i<=InitialStream.Length());
int i=1;
byte ASCIICodeBit;
AnsiString ASCIICodeString="";
do
{
ASCIICodeBit=InitialStream;
for(byte x=0x80;x>0;x=x>>1)
ASCIICodeString+=(ASCIICodeBit&x)?'1':'0';
i++;
}
while(i<=InitialStream.Length());
Цитата:
Originally posted by Slava_rec
Мой код тотально рабочий!!! :D
Мне нужно сконвертировать однобайтовое число, т.е. ASCII-код ЛЮБОГО символа, в его в строковый эквивалент... Я же ясно это написал!!!
Мой код тотально рабочий!!! :D
Мне нужно сконвертировать однобайтовое число, т.е. ASCII-код ЛЮБОГО символа, в его в строковый эквивалент... Я же ясно это написал!!!
Ну я же привел тебе пример кода. Можешь использовать. Биты в результате идут в порядке L-R (слева направо - от младшего к старшему).
Если нужен обратный порядок, тогда так:
Код:
char *ptr;
AnsiString ASCIICodeString = "";
AnsiString InitialStream = InitialStreamRichEdit->Text;
ptr=InitialStream.c_str();
while(*ptr)
{
for (int j=0;j<8;j++)
{
ASCIICodeString+=(char)(0x30+(((*ptr)&0x80))>>7);
*ptr<<=1;
}
ptr++;
}
AnsiString ASCIICodeString = "";
AnsiString InitialStream = InitialStreamRichEdit->Text;
ptr=InitialStream.c_str();
while(*ptr)
{
for (int j=0;j<8;j++)
{
ASCIICodeString+=(char)(0x30+(((*ptr)&0x80))>>7);
*ptr<<=1;
}
ptr++;
}