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