将任意长的十六进制字符串转换为 Dart 中的数字?

Mag*_*s W 6 hex dart flutter

我需要将一个由 8 个字符的十六进制子字符串组成的字符串转换为一个整数列表。

例如,我可能有字符串

001479B70054DB6E001475B3
Run Code Online (Sandbox Code Playgroud)

它由以下子串组成

001479B7    // 1341879 decimal
0054DB6E    // 5561198 decimal
001475B3    // 1340851 decimal
Run Code Online (Sandbox Code Playgroud)

我目前正在使用convert.hex首先将字符串转换为 4 个整数的列表(因为convert.hex只处理解析 2 个字符的十六进制字符串),然后将它们相加/相乘:

String tmp;
for(int i=0; i<=myHexString.length-8; i+=8){
  tmp = myHexString.substring(i, i+8);
  List<int> ints = hex.decode(tmp);
  int dec = ints[3]+(ints[2]*256+(ints[1]*65536)+(ints[0]*16777216));
}
Run Code Online (Sandbox Code Playgroud)

有没有更有效的方法来做到这一点?

小智 17

您可以使用 int.parse('001479B7', radix: 16);

https://api.dartlang.org/stable/2.4.1/dart-core/int/parse.html

所以你的代码看起来像这样:

void main() {
  final fullString = '001479B70054DB6E001475B3';

  for (int i = 0; i <= fullString.length - 8; i += 8) {
    final hex = fullString.substring(i, i + 8);

    final number = int.parse(hex, radix: 16);
    print(number);
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,为了支持*任意*长的十六进制字符串,有一个 [`BigInt`](https://api.dartlang.org/stable/2.4.1/dart-core/BigInt-class.html) 类,它还有 [`parse`](https://api.dartlang.org/stable/2.4.1/dart-core/BigInt/parse.html) (或 [`tryParse`](https://api.dartlang. org/stable/2.4.1/dart-core/BigInt/tryParse.html)) 方法。 (2认同)