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 побитно в 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], к сожалению обоащаться нельзя [утверждать это не буду :)]
С уважением.
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);
Вначале создать такую хрень -
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);
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;