powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Битовые значения.
14 сообщений из 14, страница 1 из 1
Битовые значения.
    #39641948
akrush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Использую Delphi XE2
Подскажите как правильно получить десятичное число из битового поля.
Есть битовое поле, 32 бита.
Десятичное число в нем - 661662
Побитно выглядит так (с 31 по 0 бит): 0000 0000 0000 1010 0001 1000 1001 1110
В этом числе хранится побитно 3 значения:
1. Дата - первые 16 бит (0-15): 0001 1000 1001 1110
2. Код специалиста - следующие 8 бит (16-23): 0000 1010
3. Признак расчета - 24 бит, сейчас установлен 0.

Кручу я разные методы смещений, получения значений и что-то не получается.
Покажите пожалуйста на примере:
var data,spec,calc,val:integer;
val:=661662;
data:= получить из val биты с 0 по 15
data:= получить из val биты с 16 по 23
data:= получить из val бит 24

Как такое можно сделать. Ну никак лыжи не хотят ехать
...
Рейтинг: 0 / 0
Битовые значения.
    #39641950
akrush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrush,
неточность:
data:= получить из val биты с 0 по 15
spec:= получить из val биты с 16 по 23
calc:= получить из val бит 24


в итоге хотелось бы получить:
data=6302
spec=10
calc=0
...
Рейтинг: 0 / 0
Битовые значения.
    #39641954
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На здоровье. :)

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
TIntegerRec = packed record
    case Byte of
      1: (Lo: Word;
          Hi: Word);
      2: (LoLo: Byte;
          LoHi: Byte;
          HiLo: Byte;
          HiHi: Byte);
  end;

  TInt64 = packed record
    case Byte of
      0: (Lo: Integer;
          Hi: Integer);
      1: (LoLo: Word;
          LoHi: Word;
          HiLo: Word;
          HiHi: Word);
      2: (LoLoLo: Byte;
          LoLoHi: Byte;
          LoHiLo: Byte;
          LoHiHi: Byte;
          HiLoLo: Byte;
          HiLoHi: Byte;
          HiHiLo: Byte;
          HiHiHi: Byte);
  end;
...
Рейтинг: 0 / 0
Битовые значения.
    #39641957
akrush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman,
и что дальше? :(
...
Рейтинг: 0 / 0
Битовые значения.
    #39641963
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrush,

приведение типов... TIntegerRec(myVal) и смотри, что там.

Либо вводишь в калькуляторе нужную единичку в двоичном формате, переключаешься в десятичный и получившееся число заносишь в константу. Затем по and с этим числом смотришь на результат.
...
Рейтинг: 0 / 0
Битовые значения.
    #39641982
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrush,

Если ничего не напутал с битами, то примерно так. Через битовые маски.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
var V:DWORD;

begin
  V:=661662;
  Date:=V and $0FFFF;   // дата
  Code:=(V and $08FFF0000) shr 16; // код  
  Flag:=(V and $F0000000)<>0;  // признак
end;
...
Рейтинг: 0 / 0
Битовые значения.
    #39642000
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А чего не через массив байт?
...
Рейтинг: 0 / 0
Битовые значения.
    #39642013
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat,

Назачем?
...
Рейтинг: 0 / 0
Битовые значения.
    #39642016
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMasterakrush,

Если ничего не напутал с битами, то примерно так. Через битовые маски.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
var V:DWORD;

begin
  V:=661662;
  Date:=V and $0FFFF;   // дата
  Code:=(V and $08FFF0000) shr 16; // код  
  Flag:=(V and $F0000000)<>0;  // признак
end;



Таки напутал. Должны быть маски $07FFF0000 и $80000000 для кода и признака. Исправлюсь :)
...
Рейтинг: 0 / 0
Битовые значения.
    #39642512
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrushПодскажите какой запрос нужно выполнить во время подключения к Export.fdb чтобы перетянуть все данные из одной БД в другую.
Это 2 разных подключения, одним запросом не получится.

П.С. Так и нужно было называть тему "Все вопросы от меня в одной теме [+]". :)
...
Рейтинг: 0 / 0
Битовые значения.
    #39642527
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
10.05.2018 10:53, wadman пишет:
> Это 2 разных подключения, одним запросом не получится.

отнюдь.
но всё зависит от.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Битовые значения.
    #39642531
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman,

EXECUTE STATEMENT ... ON EXTERNAL ... - все в одном можно выкрутить. Начиная с ФБ 2.5
...
Рейтинг: 0 / 0
Битовые значения.
    #39642532
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrush,

Path_to_Intalled_FB_Server\doc\sql.extensions\README.execute_statement2.txt
...
Рейтинг: 0 / 0
Битовые значения.
    #39642939
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrushИспользую Delphi XE2
Подскажите как правильно получить десятичное число из битового поля.


Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
val:=661662;    // 0000 0000 0000 1010 0001 1000 1001 1110

// data:= получить из val биты с 0 по 15
// 0000 0000 0000 1010 0001 1000 1001 1110
  data := val and $0000FFFF;

// spec:= получить из val биты с 16 по 23
// 0000 0000 0000 1010 0001 1000 1001 1110
  spec:= ( val shr 16 ) and $000000FF;

// calc:= получить из val бит 24
// 0000 0000 0000 1010 0001 1000 1001 1110
  calc:= ( val shr 24 ) and $00000001;


С уважением, Polesov.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Битовые значения.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]