Форум: "Основная";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];
ВнизПреобразование BYTE to BIN Найти похожие ветки
← →
Fast (2004-04-15 14:52) [0]Как проще всего из байта получить битовую маску в виде строки?
← →
Тимохов © (2004-04-15 14:55) [1]проще всего посмотреть историю за 2 дня - вопрос был
← →
Alx2 © (2004-04-15 14:56) [2]Проще всего - по таблице из 256 элементов.
А лучше - с помощью операций сдвига и логических.
← →
Digitman © (2004-04-15 14:57) [3]сдвигай в цикле свой байт 8 раз влево ... если выдвинутый бит равен 1, добавляй в результ.строку "1", иначе - "0"
куда уж проще
← →
Тимохов © (2004-04-15 14:59) [4]
> Fast (15.04.04 14:52)
виноват, что в историю послал - там другой вопрос (наздавание просто схожее).
в общем то согласен с предыдущими ораторами
← →
Fast (2004-04-15 15:01) [5]Спасиб, значит встроенной процедуры нет.
Тогда буду делать по циклам.
← →
TUser © (2004-04-15 15:02) [6]var b:byte; i:integer;
s:=string;
begin
s:="";
for i:=1 to 8 do begin
s:=inttostr(b mod 2)+s;
b:=b div 2;
end;
end;
Типа обычный алгоритм - как записать число в N-ричной системе.
← →
Alx2 © (2004-04-15 15:14) [7]Как вариант - с таблицей.
function ToBinStr(B : Byte):String;
Const
Templates : array [0..3] of String[2]=
("00","01","10","11");
begin
Result :=
Templates[(B shr 6) and 3]+
Templates[(B shr 4) and 3]+
Templates[(B shr 2) and 3]+
Templates[B and 3];
end;
← →
Ega23 © (2004-04-15 15:18) [8]for i:=1 to 8 do if ((N shr i) and 1)=1 then s:=s+"1" else s:=s+"0";
← →
Anatoly Podgoretsky © (2004-04-15 15:28) [9]Ega23 © (15.04.04 15:18) [8]
А нулевой бит Пушкин будет обрабатывать?
И почему слева направо, обычно наоборот,
← →
Тимохов © (2004-04-15 15:34) [10]
> Ega23 © (15.04.04 15:18) [8]
так то
тут палец в рот не клади - в миг откусят :)))))
← →
Ega23 © (2004-04-15 15:35) [11]Сорри, ошибочка вышла....
for i:=7 downto 0 do if ((N shr i) and 1)=1 then ss:=ss+"1" else ss:=ss+"0";
← →
Fast (2004-04-15 15:36) [12]Ну если поколения понадобиться то вот с иправлениями :)
var
Full_bit = "1";
Empty_bit = "0";
i:integer;
s:string;
begin
for i:=0 to 7 do
if ((b shr i) and 1)=1
then s:=Full_bit+s
else s:=Empty_bit+s;
end;
← →
WebErr © (2004-04-15 15:44) [13]
> Ega23 © (15.04.04 15:35) [11]
Ну почему же ошибочка?! :)
// some byte N
S := "";
for i := 1 to 8 do
begin
case (N and $80) of
0: S := S + "0";
$80: S := S + "1";
end;
N := N shr 1;
end;
Господи! В С++ гораздо проще работать с битами!!! :))))
for(i=0; i<8; i++, n>>=1)
strcat(s, ((n & 0x80) ? "1" : "0"));
:))))
← →
TUser © (2004-04-15 15:46) [14]В Си++ гораздо проще работать с битами и указателями, зато там отнюдь не проще рабоать со всем остальным ...
← →
Тимохов © (2004-04-15 15:46) [15]
> Господи!
какое отношение творец имеет к c++?
в дельфи вам никтно не мешает приведенную функцию также вытянуть в две строки, можно даже в одну.
← →
WebErr © (2004-04-15 15:47) [16]
> TUser © (15.04.04 15:02) [6]
> var b:byte; i:integer;
> s:=string;
> begin
> s:="";
> for i:=1 to 8 do begin
> s:=inttostr(b mod 2)+s;
> b:=b div 2;
> end;
> end;
>
> Типа обычный алгоритм - как записать число в N-ричной системе.
Это что ещё за b mod 2 и b div 2
Ещё раз увижу - руки оторву!!!
← →
Тимохов © (2004-04-15 15:48) [17]
> Это что ещё за b mod 2 и b div 2
> Ещё раз увижу - руки оторву!!!
почему?
← →
Alx2 © (2004-04-15 15:48) [18]>WebErr © (15.04.04 15:47) [16]
В asm-коде оптимизатор превратит это в shr и and
← →
WebErr © (2004-04-15 15:50) [19]
> WebErr © (15.04.04 15:44) [13]
Вот ты брат и ошибся!!!
$80 тоже надо двигать вправо вместе с числом!!!
← →
Тимохов © (2004-04-15 15:50) [20]
> WebErr © (15.04.04 15:47) [16]
не верите 18, проверьте сами.
ручки человеку еще пригодятся
← →
TUser © (2004-04-15 15:50) [21]Не понял ...
← →
WebErr © (2004-04-15 15:53) [22]
> TUser © (15.04.04 15:50) [21]
b div 2 ~ b shr 1
b mod 2 ~ b and 1
Читаемость у новичков сразу теряется, но появляется уверенность, что асм-анализатору не придётся делать пару лишних процедур!
Люди, берегите оптимизатор, не загружайте его работой, он был создан, чтобы радоваться жизни, а не работать!!! :))))
← →
TUser © (2004-04-15 15:54) [23]Пишите сразу на асме, дабы он жизни раовался
← →
WebErr © (2004-04-15 15:56) [24]
mov a, b
shr a, 1
mov c, b
and c, 1
:))))
← →
WebErr © (2004-04-15 16:04) [25]
> WebErr © (15.04.04 15:44) [13]
Не, брат, прости - не могу я спокойно на твои ошибки смотреть!!! :))))
procedure ByteToBin(Value: Byte): String;
var
I, One: Byte;
begin
Result := "";
One := $80;
for I := 1 to 8 do
begin
if Value and One = 0 then
Result := Result + "0"
else
Result := Result + "1";
One := One shr 1;
{
asm
begin
shr One, 1
end;
}
end;
end;
Эх! А на С++ всё равно лучше получается!!! :))))
← →
WebErr © (2004-04-15 16:13) [26]Очень прошу не стирать!!!
/* ANSI !!! */
void ByteToBin(unsigned char Value, char *Result)
{
unsigned char I, One=0x80;
for(I = 0, *Result = 0; I < 8; I++, One >>= 1)
strcat(Result, ((Value & One) ? "1" : "0"));
}
:))))
← →
WebErr © (2004-04-15 16:15) [27]Объявляю конкурс на самый короткий код на паскале этой функции! :))))
Приз поллитра от создателей сайта (не скажу какого)!!! :))))
← →
MBo © (2004-04-15 16:26) [28];)
function ToBinStr(b:byte):string;
var bb:Byte;
begin
Result:=" ";
for bb:=7 downto 0 do Result[8-bb]:=Chr(48+(b shr bb) and 1);
end;
← →
Sam Stone © (2004-04-15 16:29) [29]Пжалста ;))
uses idGlobal;
function IntToBin(Value: cardinal): string;
Returns a binary string representation for an Integer value.
← →
WebErr © (2004-04-15 16:30) [30]
> MBo © (15.04.04 16:26) [28]
Пока ты - лидер!
Но для лучшей читаемости
Result:="12345678";
← →
Игорь Шевченко © (2004-04-15 16:33) [31]
function IntToBin(Value: Longint; Digits, Spaces: Integer): string;
begin
Result := "";
if Digits > 32 then Digits := 32;
while Digits > 0 do begin
if (Digits mod Spaces) = 0 then Result := Result + " ";
Dec(Digits);
Result := Result + IntToStr((Value shr Digits) and 1);
end;
end;
RxLib
← →
Alx2 © (2004-04-15 16:47) [32]Сократил код у Бориса (MBo) :)))
Function ToBinStr(b: byte): ShortString;
Var
bb: Byte;
Begin
For bb := 7 Downto 0 Do
Result[8 - bb] := Chr(48 + (b Shr bb) And 1);
Result[0]:=#8;
End;
← →
WebErr © (2004-04-15 16:50) [33]
> Alx2 © (15.04.04 16:47) [32]
Сократил на 6 символов (видимых и не пробелов) вот и получай пока лидерство (а не поллитра - пока) и проблемы с авторскими правами и зубами!!! :))))
← →
Fay © (2004-04-15 17:10) [34]Я не силён в ShortString-ах, скажите - длину задавать не надо?
Result[8 - bb]
от Alx2 © (15.04.04 16:47) [32] не смущает?
8)
← →
WebErr © (2004-04-15 17:15) [35]
> Fay © (15.04.04 17:10) [34]
Всё дело в строчке
Result[0]:=#8;
В String (коротких!) первый байт с индексом ноль (!) - это длина строки.
Т.е.S := "123";
S[0] = #3
S[1] = "1"
S[2] = "2"
S[3] = "3"
← →
Fay © (2004-04-15 17:20) [36]А ей (это строчке) не лучше бы находиться перед
Result[8 - bb]
?
← →
WebErr © (2004-04-15 17:25) [37]Без разницы - всё равно, пока не начнём юзать данный стринг, главное, чтобы за 255 индекс не перевалил! :)))) 8 < 255
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.12 c