Работа с двоичными данными

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Работа с двоичными данными

Сообщение ZW » 16.08.2006 15:14:43

Возник вопрос, каким образом определить паскале на какой позиции стоит единица в двоичном представлении числа? Как переконвертить символ в двоичную форму?
Как сразу указать при получении данных что они идут в двоичном ввиде?
Заранее спасибо за помощь
ZW
новенький
 
Сообщения: 26
Зарегистрирован: 16.08.2006 15:11:23

Сообщение mr.denton » 16.08.2006 16:29:59

интересно, а как данные могут передаваться не в двоичном виде? а насчет первого:

Код: Выделить всё
const
  a1 = 0001b;
  a2 = 0010b;
  a3 = 0100b;
  a4 = 1000b;

var a: integer;

begin

...

  if a and a1 = a1 then showmessage('1');
  if a and a2 = a2 then showmessage('2');
  if a and a3 = a3 then showmessage('3');
  if a and a4 = a4 then showmessage('4');
end;


соответсвенно если a=0011b, то прога выведет 1 и 2.
Это только принцип, в реальных условиях можно придумать что-нибудь получше.
Аватара пользователя
mr.denton
новенький
 
Сообщения: 23
Зарегистрирован: 30.04.2006 03:23:07

Сообщение ZW » 16.08.2006 17:23:16

mr.denton писал(а):интересно, а как данные могут передаваться не в двоичном виде? а насчет первого:



Имеется ввиду в двоичном представлении. Понятно, спасибо. Только другой вариант напрашивается сам по себе - пеконвертить двоичной представление в строковое (011b->'011') и посимвольно выяснить кто на на какой позиции находится...
ZW
новенький
 
Сообщения: 26
Зарегистрирован: 16.08.2006 15:11:23

Сообщение SH@RK » 16.08.2006 17:57:16

Это получится так же, как ехать из в Москвы в Питер через Владивосток.
SH@RK
незнакомец
 
Сообщения: 9
Зарегистрирован: 03.08.2006 15:32:28

Сообщение ZW » 16.08.2006 18:13:07

SH@RK писал(а):Это получится так же, как ехать из в Москвы в Питер через Владивосток.


Согласен. Но я понятия не имею какой длины ко мне придут данные.
ZW
новенький
 
Сообщения: 26
Зарегистрирован: 16.08.2006 15:11:23

Сообщение ZW » 16.08.2006 18:15:46

Данные еще эти надо закачать из файла, примерно такого вида:
110101
010101
011100
--------
011100
111000

и тд.

Проблема в разделителе.
ZW
новенький
 
Сообщения: 26
Зарегистрирован: 16.08.2006 15:11:23

Сообщение shade » 16.08.2006 18:31:04

Можно так:
Код: Выделить всё
procedure Bits(x: Integer);
// Перебор всех бит
var i: Integer;
begin
  i := 1;
  while x <> 0 do
  begin
    if (x mod 2) = 1 then ShowMessage( IntToStr(i) );
    x := x div 2;
    Inc(i);
  end; // while
end;

function TestBit(x, i: Integer): Boolean;
// Проверка утановлен ли бит
// i - номер бита, нумерация с нуля
begin
  Assert( (i >= 0) and (i < SizeOf(x)*8) );
  Result := (x shl i) mod 2 = 1;
end;


PS: столь размытый вопрос большая редкость :roll:
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Сообщение shade » 16.08.2006 18:33:29

ZW писал(а):Проблема в разделителе.

А что за проблема?
Проеряй если не последовательность нулей и единиц, то игнорируй строку (к примеру)...
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Сообщение ZW » 16.08.2006 19:55:22

shade писал(а):Можно так:


PS: столь размытый вопрос большая редкость :roll:


Большое спасибо:)
PS. заразмытось формулировок извиняюсь;)
ZW
новенький
 
Сообщения: 26
Зарегистрирован: 16.08.2006 15:11:23

Сообщение ZW » 16.08.2006 19:56:18

shade писал(а):
ZW писал(а):Проблема в разделителе.

А что за проблема?
Проеряй если не последовательность нулей и единиц, то игнорируй строку (к примеру)...


Я упираюсь в несоместимость типов...:( понимаю, что туплю, но легче от этого не становится:(
ZW
новенький
 
Сообщения: 26
Зарегистрирован: 16.08.2006 15:11:23

Сообщение ZW » 17.08.2006 09:27:03

shade писал(а):Можно так:
[
function TestBit(x, i: Integer): Boolean;
// Проверка утановлен ли бит
// i - номер бита, нумерация с нуля
begin
Assert( (i >= 0) and (i < SizeOf(x)*8) );
Result := (x shl i) mod 2 = 1;
end;[/code]

PS: столь размытый вопрос большая редкость :roll:


В функции ошибка, по идее должно быть shr, а не shl.
ZW
новенький
 
Сообщения: 26
Зарегистрирован: 16.08.2006 15:11:23

Сообщение shade » 17.08.2006 10:11:23

Да, действительно, опечатлся :oops:
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Сообщение ZW » 17.08.2006 10:19:17

shade писал(а):Да, действительно, опечатлся :oops:


Бывает:)
ZW
новенький
 
Сообщения: 26
Зарегистрирован: 16.08.2006 15:11:23

Сообщение ZW » 17.08.2006 11:44:02

ZW писал(а):Я упираюсь в несоместимость типов...:( понимаю, что туплю, но легче от этого не становится:(


Ничего не понимаю, каким образом разрулить этот файл?
ZW
новенький
 
Сообщения: 26
Зарегистрирован: 16.08.2006 15:11:23

Сообщение shade » 17.08.2006 12:05:53

Чтобы понять нужно просто ответить на вопрос: А что именно храниться в файле?
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

След.

Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13

Рейтинг@Mail.ru