Javascript 将字符串作为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

我正在开发一个移动应用程序,用于与蓝牙模块通信。我通过android应用程序发送数据,并通过BLE模块接收数据

我正在使用cordova&BLE central插件与android上的cordova设备进行通信

应用程序似乎工作正常,但Uint8缓冲区有问题

在应用程序部分:

我正在尝试发送字符串,如下所示:

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);
    }