在 Dart 中将整数转换为布尔列表

Converting an Interger to a bool List in Dart

我在共享首选项中存储了一个号码。此数字是一个转换后的二进制数字,表示一些用户可更改的复选框的状态。

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

我设法将此列表转换为整数,但我无法以相反的方式进行转换。

我只需要一个像这样的解决方案 whosebug.com/questions/4448063/how-can-i-convert-an-int-to-an-array-of-bool 但在 Dart 中。因为我是 Dart 的新手,所以我很难找到解决方案。

沿着位掩码走一个 1,逻辑与位掩码。

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;
}

这个函数可以为你做到这一点:

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
}