Javascript 将字符串作为Uint8缓冲区发送
我正在开发一个移动应用程序,用于与蓝牙模块通信。我通过android应用程序发送数据,并通过BLE模块接收数据 我正在使用cordova&BLE central插件与android上的cordova设备进行通信 应用程序似乎工作正常,但Uint8缓冲区有问题 在应用程序部分: 我正在尝试发送字符串,如下所示:Javascript 将字符串作为Uint8缓冲区发送,javascript,c,arduino,buffer,uint8t,Javascript,C,Arduino,Buffer,Uint8t,我正在开发一个移动应用程序,用于与蓝牙模块通信。我通过android应用程序发送数据,并通过BLE模块接收数据 我正在使用cordova&BLE central插件与android上的cordova设备进行通信 应用程序似乎工作正常,但Uint8缓冲区有问题 在应用程序部分: 我正在尝试发送字符串,如下所示: var data : 'action/523'; 在最终将数据发送到BLE设备之前,我使用以下函数将字符串转换为数组缓冲区 function stringToArrayBuffer(st
var data : 'action/523';
在最终将数据发送到BLE设备之前,我使用以下函数将字符串转换为数组缓冲区
function stringToArrayBuffer(str) {
// assuming 8 bit bytes
var ret = new Uint8Array(str.length);
for (var i = 0; i < str.length; i++) {
ret[i] = str.charCodeAt(i);
}
return ret.buffer;
}
var data = stringToArrayBuffer(data);
ble.writeWithoutResponse(app.connectedPeripheral.id, SERVICE_UUID, WRITE_UUID, data, success, failure);
现在这很好,但稍后当我发送字符串时,如下所示
var data : 'action/3';
它只替换整数的第一个数字&追加前面的整数值3[23]'action/323/代码>
每次我尝试先发送2个或更多的数字值,然后再发送较小的数字值时,都会发生这种情况
为什么会这样?有缓冲区缓存之类的东西吗 在您的设备部分,您似乎收到了两个数据:
原始数据(字符*非空终止的)
数据长度
您应该以NULL结束收到的字符串
void SimbleeBLE_onReceive(char *data, int len)
{
char tmp[256]={0};
strncpy(tmp,data,min(len,sizeof(tmp)-1));
Serial.print(tmp);
}
这样,在第二次通话中,您应该看到操作/3而不是操作/323/谢谢您的解释和回答!只有一个错误。。代码的第4行缺少括号。:)请编辑。谢谢
void SimbleeBLE_onReceive(char *data, int len)
{
char tmp[256]={0};
strncpy(tmp,data,min(len,sizeof(tmp)-1));
Serial.print(tmp);
}