【问题标题】:Convert bytes to bits in dart, and vice versa将字节转换为 dart 中的位,反之亦然
【发布时间】:2021-09-24 06:34:15
【问题描述】:

我不是 Dart 方面的专家,尤其不是字节操作方面的专家。 我使用 flutter_blue 并接收或发送 int 列表,如 [211, 13, 67]。 我读了enter link description here,这对我来说并不直观,但成功地将这些数据转换为字符串或数字, 但在某些情况下,我需要将一个字节转换为其等效的 8 位 int,反之亦然。 例如:0100000 -> 0x....,或 [165] -> 01111111

你能帮帮我吗? 谢谢

【问题讨论】:

  • 您的意思是要将整数转换为显示整数二进制表示的字符串吗?因为在 Dart 中,int a = 0x10int a = 16 没有区别。
  • @julemand101,是的。从二进制到整数
  • 好的,所以你有一个String,其中包含一些01 字符你想转换成int?你有这些字符串的一些例子吗?它们都是以0x 开头的吗?
  • @julemand101,我没有字符串,而是从蓝牙读取的 int 列表,例如 [123, 45, 222...],首先,我想要它的二进制表示
  • 但您只是要求“二进制到整数”。如果“二进制”表示不是String,你甚至是什么意思?

标签: dart binary byte


【解决方案1】:

这样的东西能胜任吗?

void main() {
  final list = [211, 13, 67];

  for (final number in list) {
    print('${intTo8bitString(number)} = $number');
  }
  // 11010011 = 211
  // 00001101 = 13
  // 01000011 = 67

  for (final number in list) {
    print('${intTo8bitString(number, prefix: true)} = $number');
  }
  // 0x11010011 = 211
  // 0x00001101 = 13
  // 0x01000011 = 67

  print(binaryStringToInt('0x11010011')); // 211
  print(binaryStringToInt('1101')); // 13
  print(binaryStringToInt('01000011')); // 67
}

String intTo8bitString(int number, {bool prefix = false}) => prefix
    ? '0x${number.toRadixString(2).padLeft(8, '0')}'
    : '${number.toRadixString(2).padLeft(8, '0')}';

final _pattern = RegExp(r'(?:0x)?(\d+)');

int binaryStringToInt(String binaryString) =>
    int.parse(_pattern.firstMatch(binaryString)!.group(1)!, radix: 2);

【讨论】:

    猜你喜欢
    • 2013-11-11
    • 2019-04-22
    • 1970-01-01
    • 2021-08-13
    • 1970-01-01
    • 1970-01-01
    • 2015-02-16
    • 2014-11-30
    • 1970-01-01
    相关资源
    最近更新 更多