Преобразование Interger в список bool в Dart - PullRequest
0 голосов
/ 14 марта 2020

У меня есть номер в общих настройках. Этот номер является преобразованным двоичным числом, представляющим состояние нескольких изменяемых пользователем флажков.

false false false false => 0000 => 0
false false false true => 0001 => 1
false false true false => 0010 => 2
false false true true => 0011 => 3
false true true true => 0111 => 7
true true true true => 1111 => 15

Мне удалось преобразовать этот список в целое число, но я не могу сделать это иначе.

Мне просто нужно решение, подобное этому stackoverflow.com / questions / 4448063 / как можно конвертировать в массив массива , но в дартс. Поскольку я очень плохо знаком с Дартом, у меня проблемы с поиском решения.

Ответы [ 2 ]

1 голос
/ 15 марта 2020

Пройдите одну битовую маску на единицу, логически добавив к ней битовую маску.

void main() {
  print(asBools(7, 4)); // prints [false, true, true, true]
}

/// Convert a bitmap to a [List] of [bool]s.
/// 
/// [val] is the bitmap, [bits] is the number of relevant bits and therefore
/// the length of the returned list.
/// 
/// Assumes the bits are in the least significant bits of [val].
List<bool> asBools(int val, int bits) {
  var list = List<bool>(bits);
  var mask = 1 << (bits - 1);
  for (var i = 0; i < bits; i++, mask >>= 1) {
    list[i] = val & mask != 0;
  }
  return list;
}
0 голосов
/ 16 марта 2020

Эта функция может сделать это для вас:

import 'dart:math';


int boolArrayToDecimal(List<bool> items) => 
  items.asMap().map<int,int>((k,v)=>MapEntry(k,v?pow(2,items.length-k-1):0)).values.reduce((a,b)=>a+b);



void main() {
  print(boolArrayToDecimal([true,true,false,false])); //outputs 12
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...