Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Char побитно в String где ошибка???

442
01 февраля 2003 года
HexoGenus
121 / / 20.03.2000
Char побитно в String где ошибка???

char a=0;
bool *p=(bool *) &a;
String s;
for (int i=0;i<8;++i) if (p==0) s=s+'0'; else s=s+'1';
ShowMessage(s);
1.8K
02 февраля 2003 года
Blackvic
43 / / 03.12.2002
Цитата:
Originally posted by HexoGenus
Char побитно в String где ошибка???

char a=0;
bool *p=(bool *) &a;
String s;
for (int i=0;i<8;++i) if (p==0) s=s+'0'; else s=s+'1';
ShowMessage(s);



Привет. Помойму бессмыслено присваивать указатель bool *p, так как он вообще 4-х байтовый. для обращения побитно, можно использовать 2 известных мне способа:
1-й создать структуру с битовыми полями, например:

struct TBitChar
{
unsigned char b0 : 1;
unsigned char b1 : 1;
unsigned char b2 : 1;
unsigned char b3 : 1;
unsigned char b4 : 1;
unsigned char b5 : 1;
unsigned char b6 : 1;
unsigned char b7 : 1;
};

в программе, присвой переменной этой структуры
значение char a;

TBitChar *bc = (TBitChar*) &a;

далее проверяй каждый бит отдельно

if (bc->b0) ...; else ...;
if (bc->b1) ...; else ...;

2-й способ немного лучше для данного случая, необходимо для каждого бита след. проверка

// для первого бита
if (a & 0x01) ...; ...;
// для второго бита
if (a & 0x02) ...; ...;
// для третьего бита
if (a & 0x04) ...; ...;
// для 4 бита
if (a & 0x08) ...; ...;
// для 5 бита
if (a & 0x10) ...; ...;
// т.д.

Ну а через массив, типа a[1], к сожалению обоащаться нельзя [утверждать это не буду :)]

С уважением.

1.8K
03 февраля 2003 года
ALI
129 / / 10.01.2003
вот так не пробовали?
 
Код:
char t=200;
AnsiString S= "";
char c [8]={1,2,4,8,16,32,64,128};
for (int i=7;i>-1 ;i--)S+=t&c?"1":"0";
ShowMessage(S);
3.4K
03 февраля 2003 года
Yak40
4 / / 03.02.2003
Помоему проще вот так:
Вначале создать такую хрень -

union TChar
{
struct
{
Byte B0 :1;
Byte B1 :1;
Byte B2 :1;
Byte B3 :1;
Byte B4 :1;
Byte B5 :1;
Byte B6 :1;
Byte B7 :1;
};
char sym;
} Sym;

А потом ею пользоваться -

Sym.B0 = 1;
Sym.B1 = 0;
Sym.B2 = 0;
Sym.B3 = 0;
Sym.B4 = 0;
Sym.B5 = 0;
Sym.B6 = 1;
Sym.B7 = 0;

String char_sym = Sym.sym;
ShowMessage(char_sym);
247
03 февраля 2003 года
wanja
1.2K / / 03.02.2003
А ещё можно руками - делить на 2 и вставлять в конец строки остаток.:)
475
03 февраля 2003 года
Winnie
90 / / 20.03.2000
Цитата:
Originally posted by HexoGenus
Char побитно в String где ошибка???

char a=0;
bool *p=(bool *) &a;
String s;
for (int i=0;i<8;++i) if (p==0) s=s+'0'; else s=s+'1';
ShowMessage(s);



Все гениальное просто... (с) кто-то

char a=0;
String s;
for (int i=0, char tmpa = a; i < 8; i++, tmpa>>=1)
{
s = ('0'+ (tmpa & 1)) + s;
}
ShowMessage(s);

Принцип работы:
конструкция '0' + (tmpa & 1) возвращает символ '0' если младший бит 0 и '1' если бит 1

на каждом проходе сдвигаем переменную на 1 вправо - т.е. в младшем бите перебираем все биты.

- можно обойтись без промежуточной переменной
написав s = ('0' + ((a >> i) & 1)) + s;

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог