将字节转换为 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 = 0x10
或 int a = 16
没有区别。
@julemand101,是的。从二进制到整数
好的,所以你有一个String
,其中包含一些0
和1
字符你想转换成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 中的位,反之亦然的主要内容,如果未能解决你的问题,请参考以下文章