С Новым годом! Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
0 / 0 / 2
Регистрация: 29.03.2013
Сообщений: 54

Как пять бит перевести в строку и обратно?

30.09.2015, 15:30. Показов 2886. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Будьте добры, подскажите
не могу сообразить что-то

Есть пять переменных типа bool b1,b2,b3,b4,b5
нужно из них сделать одну строковую переменную(которую я потом переведу в число)
то есть мне нужно получить что-то типа 01101

И самое важное потом суметь перевести это число обратно и присвоить каждое значение своей битовой переменной
и я тут чтото застопорился..
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.09.2015, 15:30
Ответы с готовыми решениями:

Как перевести строку в hex и обратно?
Немогу найти в гугле функцию какбы перевести строку в hex и обратно, мб у кого завалялась?

Как на PHP перевести Unicode строку в HEX и обратно?
Как можно на PHP перевести Unicode UTF-16 строку в HEX и обратно? str = Привет Мир! hex = 041f044004380432043504420020041c043804400021

Перевести строку с буквами и числами в число и обратно
К примеру есть строка "Строка123". Мне нужно перевести ёё в целое число. Способ не важен. Главное чтобы по ответу можно было вернуть...

8
 Аватар для Arcor
5709 / 2300 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
30.09.2015, 15:41
Цитата Сообщение от maxn Посмотреть сообщение
И самое важное потом суметь перевести это число обратно и присвоить каждое значение своей битовой переменной
а кто сказал что Boolean имеет размер в 1 бит? оно равно 1 байту, что есть 8 бит

далее вопрос, нужно условно переделать True/False или же (1/0) в составную строку? Или действительно поработать с каждым битом отдельно? - это уже будет другая история
0
Злостный нарушитель
 Аватар для Verevkin
10247 / 5674 / 1262
Регистрация: 12.03.2015
Сообщений: 26,287
30.09.2015, 15:54
изящненько?
Delphi
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
28
29
30
type
  TFiveBools = record
  public
    function GetString: string;
    procedure SetString(S: string);
    case Integer of
      0  (b1, b2, b3, b4, b5: Boolean);
      1: (B: array[0..4] of Boolean);
  end;
  
function TFiveBools.GetString: string;
var
  x: Boolean;
begin
  Result:= '';
  for x in B do
    if x
      then Result:= '1' + Result
      else Result:= '0' + Result;
end;
 
procedure TFiveBools.SetString(S: string);
var
  idx: Integer; // для разнообразия :)
begin
  for idx:= 1 to Length(S) do
    if idx - 1 < High(B)
      then B[idx - 1]:= Result <> '0'
      else Break;
end;
ВНИМАНИЕ!
УВАГА!!
АХТУНГ!!!
АТТЕНШН!!!!

Shit-code detected!
Код не отлаживал. Писал на заборе!
1
0 / 0 / 2
Регистрация: 29.03.2013
Сообщений: 54
30.09.2015, 16:04  [ТС]
Arcor, привет
смысл в том, что нужно из 5-ти битовых переменных создать одну типа Integer(для последующего хранения)
и должна быть обратная операция, которая из этого числа получает биты
Поэтому я хотел из битов путем суммирования сделать строку, а ее уже перевести в Int
только потом как обратно из строки получать биты, каким-то парсингом что-ли..

Может быть все как-то проще можно сделать, то есть сразу преобразовать массив единиц и нулей в одно число и наоборот.

Добавлено через 7 минут
Веревкин, любопытно. а работать будет?
0
 Аватар для Arcor
5709 / 2300 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
30.09.2015, 16:16
ну тут тогда по другому надо, тут надо битовые операции

вот так вот например собрать число можно из отдельных битиков

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
procedure TForm1.Button1Click(Sender: TObject);
var K: Integer; // само число
    n: Byte;    // номер бита, который ставим в 1
begin
  K := 0;
 
  n := 1;
  K := K or (1 shl (n - 1));
 
  n := 2;
  K := K or (1 shl (n - 1));
 
  n := 5;
  K := K or (1 shl (n - 1));
 
  n := 7;
  K := K or (1 shl (n - 1));
 
  ShowMessage(IntToStr(K));
end;
аналогично обратную операцию сделать надо

Добавлено через 6 минут
Delphi
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
28
29
30
31
32
33
34
35
procedure TForm1.Button1Click(Sender: TObject);
var K: Integer; // само число
    n: Byte;    // номер бита, который ставим в 1
    i: Integer;
    S: String;
begin
  K := 0;
 
  // установка n'го бита
  n := 1;
  K := K or (1 shl (n - 1)); // так устанавливается бит в n позиции
 
  n := 2;
  K := K or (1 shl (n - 1));
 
  n := 5;
  K := K or (1 shl (n - 1));
 
  n := 7;
  K := K or (1 shl (n - 1));
 
  // вывод результата
  ShowMessage(IntToStr(K));
 
  // сбор его числа в виде отдельных битов в строку
  for i := 7 downto 0 do
    begin
      if (K and (1 shl i)) <> 0 then  // так проверяется бит в n позиции
        S := S + '1'
      else
        S := S + '0'
    end;
 
  ShowMessage(S);
end;
грубо набросал
1
0 / 0 / 2
Регистрация: 29.03.2013
Сообщений: 54
30.09.2015, 16:25  [ТС]
Цитата Сообщение от Verevkin Посмотреть сообщение
function TFiveBools.GetString: string;
procedure TFiveBools.SetString(S: string);
var
* idx: Integer; // для разнообразия
begin
* for idx:= 1 to Length(S) do
* * if idx - 1 < High(B)
* * * then B[idx - 1]:= Result <> '0'
* * * else Break;
end;
Verevkin, в процедуре компилятор не понимает Result

Добавлено через 41 секунду
Arcor, спасибо, попробую завтра
0
Злостный нарушитель
 Аватар для Verevkin
10247 / 5674 / 1262
Регистрация: 12.03.2015
Сообщений: 26,287
30.09.2015, 18:59
Цитата Сообщение от maxn Посмотреть сообщение
Веревкин, любопытно. а работать будет?
Хрен его знает. Попробуй.
Цитата Сообщение от maxn Посмотреть сообщение
в процедуре компилятор не понимает Result
посмотри внимательно. В процедуре нету Result!
0
0 / 0 / 2
Регистрация: 29.03.2013
Сообщений: 54
01.10.2015, 09:00  [ТС]
Verevkin, есть, в строчке * * * then B[idx - 1]:= Result <> '0'
0
Злостный нарушитель
 Аватар для Verevkin
10247 / 5674 / 1262
Регистрация: 12.03.2015
Сообщений: 26,287
01.10.2015, 09:38
Цитата Сообщение от maxn Посмотреть сообщение
есть, в строчке * * * then B[idx - 1]:= Result <> '0'
Сорри, проглядел.
Должно быть так:
Delphi
1
then B[idx - 1]:= S[Index] <> '0'
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.10.2015, 09:38
Помогаю со студенческими работами здесь

Поделить строку на блоки по 12 бит и заменить в каждом блоке случайный бит
На входе есть строка типа string, каждый символ нужно перевести в последовательность битов, и эту последовательность разделить на блоки по...

Как перевести TCHAR в CHAR и обратно
Как преобразовать TCHAR в CHAR и обратно? Функцию какую-нибудь подскажите, а то с числами обход нашёл через int, а вот с символами никак

Перевод байта в бит и обратно
Добрый день. Собственно стоит следующая задача. Есть число в виде байта, перевожу его в массив битов (массив int в данном случае. Значения...

Перевод из бит в мегабайты и обратно
Нужна помощь в написании программы :Перевод из бит в мегабайты и обратно.

Как перевести данное число в HEX и обратно
Здравствуйте, помогите пожалуйста преобразовать число 1011101101010100000001010100001010001011001011001000101000010000 (64 символа) в СИ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru