如何在V8中对整数进行字符串化?

时间:2018-04-06 03:04:32

标签: c++ v8 embedded-v8

我正在尝试在v8中对整数进行字符串化。

到目前为止,我最接近成功的是使用String::Concat。我尝试编写此方法(在node.js 9.11.1本机插件中),但它不能编译。

void Method(const FunctionCallbackInfo<Value> &args) {
  Isolate *isolate = args.GetIsolate();

  const int num = 42;
  args.GetReturnValue().Set(
      String::Concat(String::NewFromUtf8(isolate, "The num is: "),
                      Integer::New(isolate, num)));
}

编译错误是:

'=': cannot convert from 'v8::Integer *' to 'v8::String *volatile '

我无法弄清楚v8 API的正确部分是否可以将整数格式化为字符串。我(可能很明显)不熟悉v8 API,我很难找到好的例子来学习。

我正在回答这个问题:How to convert an Integer to a String in V8?虽然它与现代的v8 API相比似乎过时了。例如,该示例似乎是预先“隔离”。

我的印象是Concat会接受这个,因为在JavaScript中它只是将int强制转换为字符串(这似乎是我引用的那个问题的要点)。但是我想在使用v8进行编码时我可能需要明确一点吗?

我确信这很简单,我很想念。我很感激有人建议一个更好的方法。

1 个答案:

答案 0 :(得分:1)

尝试在您刚创建的ToString上致电Integer

请参阅此处的函数声明:https://chromium.googlesource.com/v8/v8/+/6.5.254.41/include/v8.h#2333

“JavaScript只强制int”的魔力必须在某个地方实现 - 即在C ++端,所有这些转换都是手动完成的; - )