首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将v8 args转换为std::string

将v8 args转换为std::string
EN

Stack Overflow用户
提问于 2020-08-11 12:54:49
回答 1查看 334关注 0票数 0

我的目标是在Node.js中运行一个函数,并提供一个字符串作为参数/参数:

代码语言:javascript
运行
复制
const myAddon = require('path'); myAddon.myFunc(otherData, "Hello World");

根据堆栈溢出的答案,我尝试了以下几点:

代码语言:javascript
运行
复制
v8::String::Utf8Value STR_ARG(args[1]->ToString());
std::string USER_MESSAGE = std::string(*STR_ARG);

这不起作用,我收到了一条错误消息:

ToString函数不接受0参数。

我应该给函数任何输入吗?如果是,什么?

EN

回答 1

Stack Overflow用户

发布于 2020-08-11 17:11:42

我试图在我的问题中找到的解决办法没有奏效。如果它对你也不起作用,这是对我有用的密码。

代码语言:javascript
运行
复制
        v8::Local<v8::String> argsINPUT;
        argsINPUT = args[0].As<v8::String>();
//Having a Second Argument to determine the Buffer Size is Optional but Optimal
//new char[insert any int] is also okay, but it should be large enough to hold the Data
        char* args_buffer = new char[args[1].As<Number>()->Value()];
//If the Next Line thows an Error try out '(argsINPUT*)' instead of 'argsINPUT'
        argsINPUT->WriteUtf8(isolate, args_buffer);

        static std::string finalString;
        finalString.assign(args_buffer);

        delete args_buffer;

        args.GetReturnValue().Set(String::NewFromUtf8(
            isolate, finalString.c_str()).ToLocalChecked());

给Cybafelo的贷款:

Convert std::string to v8::string and viceversa?

Botje帮我解决了我最初的方法

编辑:为什么args[1].As<Number>()->Value()作为缓冲区大小可能是最优的:

js代码示例:

代码语言:javascript
运行
复制
const myAddon = require('path');

const myString = "Hello World";
myAddon.myFunc(myString, myString.length + 1);

您可以看到并且可能知道,Js为我们提供了属性和函数,其中之一是length属性,因此我们可以直接创建一个完全大小的缓冲区。+1位于末尾,因为我不确定我们是否也需要"\0“的空间

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

https://stackoverflow.com/questions/63358596

复制
相关文章

相似问题

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