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

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

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

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

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

Сообщение ZW »

Возник вопрос, каким образом определить паскале на какой позиции стоит единица в двоичном представлении числа? Как переконвертить символ в двоичную форму?
Как сразу указать при получении данных что они идут в двоичном ввиде?
Заранее спасибо за помощь
Аватара пользователя
mr.denton
новенький
Сообщения: 23
Зарегистрирован: 30.04.2006 03:23:07

Сообщение mr.denton »

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

Код: Выделить всё

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.
Это только принцип, в реальных условиях можно придумать что-нибудь получше.
ZW
новенький
Сообщения: 26
Зарегистрирован: 16.08.2006 15:11:23

Сообщение ZW »

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



Имеется ввиду в двоичном представлении. Понятно, спасибо. Только другой вариант напрашивается сам по себе - пеконвертить двоичной представление в строковое (011b->'011') и посимвольно выяснить кто на на какой позиции находится...
SH@RK
незнакомец
Сообщения: 9
Зарегистрирован: 03.08.2006 15:32:28

Сообщение SH@RK »

Это получится так же, как ехать из в Москвы в Питер через Владивосток.
ZW
новенький
Сообщения: 26
Зарегистрирован: 16.08.2006 15:11:23

Сообщение ZW »

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


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

Сообщение ZW »

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

и тд.

Проблема в разделителе.
Аватара пользователя
shade
энтузиаст
Сообщения: 879
Зарегистрирован: 21.02.2006 19:15:48
Откуда: http://shamangrad.net/
Контактная информация:

Сообщение shade »

Можно так:

Код: Выделить всё

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 19:15:48
Откуда: http://shamangrad.net/
Контактная информация:

Сообщение shade »

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

А что за проблема?
Проеряй если не последовательность нулей и единиц, то игнорируй строку (к примеру)...
ZW
новенький
Сообщения: 26
Зарегистрирован: 16.08.2006 15:11:23

Сообщение ZW »

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


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


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

Сообщение ZW »

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

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


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

Сообщение ZW »

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.
Аватара пользователя
shade
энтузиаст
Сообщения: 879
Зарегистрирован: 21.02.2006 19:15:48
Откуда: http://shamangrad.net/
Контактная информация:

Сообщение shade »

Да, действительно, опечатлся :oops:
ZW
новенький
Сообщения: 26
Зарегистрирован: 16.08.2006 15:11:23

Сообщение ZW »

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


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

Сообщение ZW »

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


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

Сообщение shade »

Чтобы понять нужно просто ответить на вопрос: А что именно храниться в файле?
Ответить