информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Все любят медГде водятся OGRыSpanning Tree Protocol: недокументированное применение
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Очередное исследование 19 миллиардов... 
 Оптимизация ввода-вывода как инструмент... 
 Зловреды выбирают Lisp и Delphi 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
если вы видите этот текст, отключите в настройках форума использование JavaScript
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
[Win32] или так: 09.04.03 15:00  Число просмотров: 1095
Автор: FFF Статус: Незарегистрированный пользователь
<"чистая" ссылка>
смотрю число $3E после вырывания
> должно получиться $F, а получается у меня $3E, как и было

не очень понял про "вырывание" -- раньше шла речь о конвертации бита. А для этого надо использовать XOR, а не OR.
<programming>
[Win32] как на delphi реализовать этот механизм 09.04.03 12:49   [ZloyShaman]
Автор: Helmet Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Есть байт, из него нужно выдрать первые 6 битов отдельно и последние
2 бита отдельно, то-есть,

Байт: 00111110
мне нужны 001111
и 10 отдельно,мне надо из одного байта сделать два...
-> beginners 09.04.03 12:59  
Автор: ZloyShaman <ZloyShaman> Статус: Elderman
<"чистая" ссылка>
> Есть байт, из него нужно выдрать первые 6 битов отдельно и
> последние
> 2 бита отдельно, то-есть,
>
> Байт: 00111110
> мне нужны 001111
> и 10 отдельно,мне надо из одного байта сделать два...
сделай AND с 11111100 для первых 6 бит и с 00000011 для последних 2-ух.
[Win32] Хм... 09.04.03 13:35  
Автор: Helmet Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> > Есть байт, из него нужно выдрать первые 6 битов
> отдельно и
> > последние
> > 2 бита отдельно, то-есть,
> >
> > Байт: 00111110
> > мне нужны 001111
> > и 10 отдельно,мне надо из одного байта сделать два...
> сделай AND с 11111100 для первых 6 бит и с 00000011 для
> последних 2-ух.
Байт может быть другим (разные байты)

Хорошо поставлю вопрос так :
Как мне менять определенные биты в байте,
то-есть проверить какое значение опеределенного бита и поменять его...
[Win32] Хм... 09.04.03 13:42  
Автор: ZloyShaman <ZloyShaman> Статус: Elderman
<"чистая" ссылка>
> > > Есть байт, из него нужно выдрать первые 6 битов
> > отдельно и
> > > последние
> > > 2 бита отдельно, то-есть,
> > >
> > > Байт: 00111110
> > > мне нужны 001111
> > > и 10 отдельно,мне надо из одного байта сделать
> два...
> > сделай AND с 11111100 для первых 6 бит и с 00000011
> для
> > последних 2-ух.
> Байт может быть другим (разные байты)
Да, совершенно верно - байты бывают разные. Но, я надеюсь, общий принцип ты уловил.
> Хорошо поставлю вопрос так :
> Как мне менять определенные биты в байте,
> то-есть проверить какое значение опеределенного бита и
> поменять его...
Пример, как поменять пятый бит в байте на 1:
нужно твой байт OR с 0000100
[Win32] Хм... 09.04.03 14:14  
Автор: Helmet Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Блин... Я понимаю это... Но это реально делать на asm там есть возможность работать в двоичном формате, а в Delphi, как это сделать?

К примеру может ли этот код проверить какой-то бит на 1 :

function IsBit (const val : integer; const Bit:byte):boolean;
begin
result:=(val and ( 1 shl Bit ))<>0;
end;

если да то,

я получил что 5 бит в байте равен 1, мне надо его поменять на 0,

не могу же я в delphi написать:

z:=z or 00001000;

а код
z:=z or (1 shl 4);

не меняет нифига.......
[Win32] или так: 09.04.03 14:02  
Автор: J'JF <Dmytro Volhushyn> Статус: Elderman
<"чистая" ссылка>
> Да, совершенно верно - байты бывают разные. Но, я надеюсь,
> общий принцип ты уловил.

> Пример, как поменять пятый бит в байте на 1:
> нужно твой байт OR с 0000100

Если так не понятно, то, возможно, для начала проще будет пойти через десятичное представление?

Имеем:
00000000 <=> 0
00000001 <=> 1
00000010 <=> 2
00000011 <=> 3
и т.д...

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

И вообще, советую изучить алгоритм перевода из десятичной в двоичную и обратно - много вопросов сразу отпадет.
[Win32] или так: 09.04.03 14:28  
Автор: Helmet Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> И вообще, советую изучить алгоритм перевода из десятичной в
> двоичную и обратно - много вопросов сразу отпадет.
Я прекрасно знаю эти алгоритмы и методом деления и методом возведения в степень... Не суть... Я пишу на Delphi, на асме правильно подставил маску и or сделал и все ОК, на делфи минимальная единица byte.... Я могу творить с ним логические операции, но как достучаться до опеределенного бита, у меня лажа получается... Запускаю калькулятор стандартный виндовый, смотрю число $3E после вырывания должно получиться $F, а получается у меня $3E, как и было Вот исходник:
//..............//

var
b,k,z,l:byte;
begin
b:=$3E;
showmessage(inttohex(b,2));
z:=0;
for k:=0 to 7 do
if (b and (1 shl k)) <> 0 then
z:=b or (1 shl k);

showmessage(inttohex(z,2));

//..............//
[Win32] или так: 09.04.03 15:13  
Автор: J'JF <Dmytro Volhushyn> Статус: Elderman
Отредактировано 09.04.03 15:16  Количество правок: 1
<"чистая" ссылка>
Если хочешь получить FF, то алгоритм должен выглядеть вот так:

//..............//

var
b,k,z:byte;
begin
b:=$3E;
showmessage(inttohex(b,2));
z:=0;
for k:=0 to 7 do
if (b and (1 shl k)) = 0 then
z:=z or (b or (1 shl k));

showmessage(inttohex(z,2));

//..............//

тогда z=$FF.
просто нужно учитывать накопление битов, что мы и делаем после then,
а также правильно надо задать условие (=0, а не <>0)
[Win32] или так: 09.04.03 15:00  
Автор: FFF Статус: Незарегистрированный пользователь
<"чистая" ссылка>
смотрю число $3E после вырывания
> должно получиться $F, а получается у меня $3E, как и было

не очень понял про "вырывание" -- раньше шла речь о конвертации бита. А для этого надо использовать XOR, а не OR.
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach