Flutter 可编解码数据原始颤振
我正在开发一个flatter应用程序,使用flatter_blue库来连接STMicroelectronics的BlueNRG瓷砖。我正在接收来自所需特征的原始数据,然后我可以使用utf8.decode()函数将它们转换为字符串 这是作为列表和问题的接收数据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
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度