admin
2022-03-31 36754ba47da7a3277d5be183a523c912a1dc4cef
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
import 'dart:math';
 
class NumberUtils {
  ///二进制数组转字节数组
  static List<int> intListFromBits(List<int> bits) {
    //print("${bits.toString()} ${bits.length ~/ 8}");
    List<int> result = List.generate(bits.length >> 3, (index) => 0);
    for (int i = 0; i < bits.length; i++) {
      result[i >> 3] |= (bits[i] << (7 - i & 7));
    }
    return result;
  }
 
  ///字节数组转二进制数组
  static List<int> bitsFromIntList(List<int> ints) {
    List<int> result = List.filled(ints.length << 3,0);
    for (int i = 0; i < (ints.length << 3); ++i) {
      result[i] = (ints[i >> 3] >> (7 - i & 7)) & 1;
    }
    return result;
//    List<int> result = [];
//    ints.forEach((i) {
//      result.addAll(to8Bit(i));
//    });
//    return result;
  }
 
  ///二进制字符串转数字
  static int intFromBits(List<int> bits) {
    //return int.parse(bits.join(), radix: 2);
    int result = 0;
    for (int i = 0; i < bits.length; i++) {
      result |= (bits[i] << (7 - i & 7));
    }
    return result;
  }
 
  ///to8Bit  01100100
  static List<int> t8Bit(List<int> bytes) {
    List<int> result = List.filled(8 * bytes.length,0);
    for (int i = 0; i < 8 * bytes.length; ++i) {
      result[i] = (bytes[i >> 3] >> (7 - i & 7)) & 1;
    }
    return result;
  }
 
  /// 4 -> 00000100
  static List<int> to8Bit(int num) {
    List<int> result = List.filled(8,0);
    for (int i = 0; i < 8; i++) {
      result[i] = (num >> (7 - i & 7)) & 1;
    }
    return result;
 
    String temp = num.toRadixString(2);
    int zeroLen = 8 - temp.length;
    for (int i = 0; i < 8; i++) {
      if (i < zeroLen) {
        result[i] = 0;
      } else {
        result[i] = (temp.codeUnitAt(i - zeroLen) - 48);
      }
    }
    return result;
  }
 
  /// 4 -> 0100
  static List<int> to4Bit(int num) {
    List<int> result = List.filled(4,0);
    for (int i = 0; i < 4; i++) {
      result[i] = (num >> (3 - i & 3)) & 1;
    }
    return result;
 
    String temp = num.toRadixString(2);
    temp.codeUnits.forEach((code) {
      result.add(code - 48);
    });
    int len = result.length;
    if (len < 4) {
      result.insertAll(0, List.generate(4, (index) => 0).sublist(len));
    }
    return result;
  }
 
  static String formatSeeds(int seeds) {
    if (seeds > 9999) {
      return '${(seeds / 10000.0).toStringAsFixed(1)}w';
    } else if (seeds > 999) {
      return '${(seeds / 1000.0).toStringAsFixed(1)}k';
    } else {
      return '$seeds';
    }
  }
}