![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа с битами
Alek © (2004-06-17 13:28:00)Добрый день всем!
Есть вопросик.
Вот у меня есть три байта
например "qwe" в них находится 18 бит.
Так вот как мне получить только первый 6 бит??
TUser (2004-06-17 15:57:00) [1]
> Вообщем идея такова, есть строка ее нужно разбить на блоки
> по 6 бит, и каждые 6 бит обозначиьт каким нить знаком. Как
> это лучше сделать??
Лучше возьми класс TBits. Хотя, если для самообразования, - то наверное, лучше ручками. Для получения в виду 100010... надо записать число в 2-ричной системе. Примерно так
result:=''; i:=ord(c); // c:char
while i>0 do begin
result:=chr(i mod 2) + result;
i:=i shr 1;
end;
Еще, кстати, у Анатолия на сайте есть описание приемов работы с битами.
ЗЫ. Архиватор будет или что?
Alek (2004-06-17 15:45:00) [2]Огромное спасибо Анатолий за подсказку :)
Anatoly Podgoretsky (2004-06-17 15:17:00) [3]Это называется Base64
Alek (2004-06-17 15:06:00) [4]Хорошо тогда вот такой вопрос.
Как мне узнать биты например вот этого символа "я"??
в таком виде
00100000
Alek (2004-06-17 13:56:00) [5]
> evvcom © (17.06.04 13:44) [3]
а ведь ты прав :) в одном байте 8 бит :).
Вообщем идея такова, есть строка ее нужно разбить на блоки по 6 бит, и каждые 6 бит обозначиьт каким нить знаком. Как это лучше сделать?? А то я очень плохо работаю с битами.
evvcom (2004-06-17 13:44:00) [6]В трех байтах вообще-то 24 бита, а не 18. А для строчных "qwe" как раз 6-й бит равен 1 (при нумерации битов в байте справа налево, начиная с 0), так его что, игнорировать? Тогда получишь "QWE".
Rater (2004-06-17 13:38:00) [7]Ну в зависимости от того с какой стороны он у тебя или в q или e
посмотреть какой там бит Я на вскидку могу предложить сделать ротацию в лево (6 или 2) и сравнить с 10000000b = 128 если больше либо равно то бит 1 иначе 0.
Наверно есть проще метод.
clickmaker (2004-06-17 13:33:00) [8]6Bits := 18Bits and $3F;