将字节转换为 dart 中的位,反之亦然

Posted

技术标签:

【中文标题】将字节转换为 dart 中的位,反之亦然【英文标题】:Convert bytes to bits in dart, and vice versa 【发布时间】: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,你甚至是什么意思? 【参考方案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);

【讨论】:

以上是关于将字节转换为 dart 中的位,反之亦然的主要内容,如果未能解决你的问题,请参考以下文章

如何在Dart中将UTF-8字符串转换为字节数组?

图像到字节数组到字符串(反之亦然)

如何将字节数组转换为位图实例 (.NET)?

从二进制形式转换浮点 NaN 值,反之亦然导致不匹配

Dart:将 Observable 转换为 Future,反之亦然?

将二进制位转换为字节数组