首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在C++中获取中数组中的值和?

如何在C++中获取中数组中的值和?
EN

Stack Overflow用户
提问于 2013-07-26 13:53:58
回答 3查看 1.4K关注 0票数 2

在我的

假设我有两个值为3和4的输入字段:

代码语言:javascript
复制
<form onchange="reload()">
  <h2>Input:</h2>
  <input type="number" id="val1" name="val1" value="3">
  <input type="number" id="val2" name="val2" value="4">
  <br><br>
  <h2>Output</h2>
  <input type="text" id="out" name="out" value="untouched by C++"><br>
</form>

In my JavaScript

我得到这两个值,并将它们推入如下数组:

代码语言:javascript
复制
Module = document.getElementById('module');
var msg = [];
msg.push(Number(document.getElementById('val1').value));
msg.push(Number(document.getElementById('val2').value));

然后我将它发送到我的C++文件以处理消息

代码语言:javascript
复制
Module.postMessage(msg);

在我的C++文件中,这里是我被困的地方。

我必须处理消息的代码如下

代码语言:javascript
复制
virtual void HandleMessage(const pp::Var& var_message) {
  std::string message = var_message.AsString();
  pp::Var var_reply = pp::Var(message);
  PostMessage(var_reply);
}

问题是它处理字符串,实际上,如果我的msg是数组的类型,它就会崩溃。

我希望它期待并接受的是一个数组或一个对象

基本上,就像这样:

代码语言:javascript
复制
virtual void HandleMessage(const pp::Var& var_message) {
  pp::Var var_reply =  var_message[0] + var_messgae[1]; // I expect this to be 3+4=7
  PostMessage(var_reply);
}

有人能帮我弄清楚如何在我的JavaScript中期望数组或对象来自C++,这样我就可以一起计算值并将结果发送回JavaScript吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-07-29 11:05:20

我已经解决了我的问题。最好的方法是使用对象并将值作为JSON对象传递,如下所示

in JavaScript

代码语言:javascript
复制
values = {
        "val1": Number(document.getElementById('val1').value),
        "val2": Number(document.getElementById('val2').value)
    };
msg = JSON.stringify(values);
Module.postMessage(msg);

然后处理消息并将响应发送回JavaScript

in C++:

在头文件中,您需要添加picoJSON来处理JSON和sstream,以便使用JSON

代码语言:javascript
复制
#include <sstream>
#include "picojson.h"
using namespace std;

然后在后面的代码中:

代码语言:javascript
复制
virtual void HandleMessage(const pp::Var& var_message) {

        picojson::value v;

        // pass the message that was sent from JavaScript as a string
        // var_message.AsString() will be in form "{\"val1\":4,\"val2\":4}");
        // and convert it to istringstream

        istringstream iss2((string)var_message.AsString());

        // parse iss2 and extract the values val1 and val2
        string err = picojson::parse(v, iss2);

        int val1 = (int)v.get("val1").get<double>();
        int val2 = (int)v.get("val2").get<double>();

        // finally send the message and you'll see the sum in the JavaScript
        PostMessage( val1 + val2 );

  }
票数 1
EN

Stack Overflow用户

发布于 2013-10-22 20:37:42

文档还没有更新,但是到了pepper_29,现在有了一个用于访问数组的pp::VarArray接口。

您可以看到新的C++接口这里的头文件。

下面是如何使用它(未经测试):

代码语言:javascript
复制
virtual void HandleMessage(const pp::Var& var_message) {
  if (!var_message.is_array()) return;

  pp::VarArray array(var_message);

  // Do some stuff with the array...
  uint32_t length = array.GetLength();
  double sum = 0;
  for (uint32_t i = 0; i < length; ++i) {
     pp::Var element = array.Get(i);
     if (element.is_number()) {
       sum += element.AsDouble();
     }
  }

  pp::Var var_reply(sum);
  PostMessage(var_reply);
}
票数 1
EN

Stack Overflow用户

发布于 2013-07-27 19:59:34

我也有同样的问题,我想发送一个字符串数组

代码语言:javascript
复制
var nativeArray = new Array();
nativeArray[0] = "Item 1"
nativeArray[1] = "Item 2"
naclModuleElement.postMessage(nativeArray)

在HandleMessage中没有任何调用

发送nativeArray.length可以在NaCl端显示“2”

经过一番研究,我发现在AsArray()类中没有pp::Var函数。

只有原语可用。

有一个类pp:VarArrayBuffer,可以用来发送/接收二进制信息。可以提供帮助(但没有下载发布在其中的示例)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17883213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档