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

How to stringify an Integer in V8?

本文关键字:整数 字符串 V8      更新时间:2023-10-16

我正在尝试在 v8 中字符串化一个整数。

到目前为止,我最接近成功的是使用String::Concat。 我尝试编写此方法(在节点.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,而且我很难找到好的例子来学习。

我正在回答这个问题:如何在 V8 中将整数转换为字符串? 尽管与现代 v8 API 相比,它似乎已经过时了。 例如,该示例似乎是预"隔离"的。

我的印象是 Concat 会接受这一点,因为在 JavaScript 中,它只是将 int 强制为字符串(这似乎是我引用的那个问题的要点)。 但我想也许在使用 v8 编码时我必须明确说明这一点?

我确定这是我错过的简单东西。我希望有人提出更好的方法。

尝试在刚刚创建的Integer上调用ToString

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

"JavaScript 只是强制 int"的魔术必须在某个地方实现——即在C++端,所有此类转换都是手动完成的;-)