Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 可编解码数据原始颤振_Flutter_Dart_Bluetooth Lowenergy_Bluetooth Gatt_Bluenrg - Fatal编程技术网

Flutter 可编解码数据原始颤振

Flutter 可编解码数据原始颤振,flutter,dart,bluetooth-lowenergy,bluetooth-gatt,bluenrg,Flutter,Dart,Bluetooth Lowenergy,Bluetooth Gatt,Bluenrg,我正在开发一个flatter应用程序,使用flatter_blue库来连接STMicroelectronics的BlueNRG瓷砖。我正在接收来自所需特征的原始数据,然后我可以使用utf8.decode()函数将它们转换为字符串 这是作为列表和问题的接收数据 I/flutter (32277): Teste conversion : [121, 85, 0, 0, 209, 133, 1, 0, 5, 10, 237, 0, 0, 0] E/flutter (32277): [ERROR:flu

我正在开发一个flatter应用程序,使用flatter_blue库来连接STMicroelectronics的BlueNRG瓷砖。我正在接收来自所需特征的原始数据,然后我可以使用utf8.decode()函数将它们转换为字符串

这是作为列表和问题的接收数据

I/flutter (32277): Teste conversion : [121, 85, 0, 0, 209, 133, 1, 0, 5, 10, 237, 0, 0, 0]
E/flutter (32277): [ERROR:flutter/lib/ui/ui_dart_state.cc(199)] Unhandled Exception: FormatException: Missing extension byte (at offset 11).
来自st板中的代码:

tBleStatus环境更新(int32按、int32按、uint16按、int16按、int16按){
uint8_t BuffPos=0;
STORE_LE_16(buff,(getTimestamp());
BuffPos=2;
存储(buff+BuffPos,按);
BuffPos+=4;
商店16(buff+BuffPos,哼哼);
BuffPos+=2;
存储16(buff+BuffPos,温度);
BuffPos+=2;
商店16(buff+BuffPos,Temp2);
返回aci_gatt_update_char_值(HWServw2Standle,EnvironmentalCharHandle,0,EnvironmentalCharSize,buff);
}
环境_更新(按发送、按发送2、按发送、尝试发送、尝试发送2);

谢谢。

您无法将原始数据转换为字符串,因为您不是以字符串的形式发送数据,而是以字节的形式发送数据

以您的体温为例: 您收到的温度为
int16\u t
,这是一个16位数字,存储–32768到32767之间的值。这个数字需要存储两个字节,这就是为什么使用
BuffPos+=2并将位置增加了2个字节

您需要以相同的方式从接收到的数组中提取值,字节方式。看看这个例子:

import 'dart:typed_data';

int fromBytesToInt16(int b1, int b0) {
    final int8List = new Int8List(2)
      ..[1] = b1
      ..[0] = b0;
  
    return ByteData.sublistView(int8List).getInt16(0);
}

void main() {
    var received = [121, 85, 0, 0, 209, 133, 1, 0, 5, 10, 237, 0, 0, 0];
    var temp = fromBytesToInt16(received[8], received[9]) / 100;
    print('temperature: $temp');
}
温度作为int16存储在索引8和索引9,所以我用同样的方法转换它。这将导致
temp
值为2565,除以100将得到相当好的温度25.65度