1 场景:
在node.js的C++扩展中,需要将js类型的参数传递给C++进行处理,所以需要将js类型转换为C++类型,例如将js字符串转换为char*。
2 步骤:
(1) js字符串转为v8::String类型
(2)v8::String类型转为 String::Utf8Value类型
(3)String::Utf8Value类型转为char* 或者const char*
3 思路:
node 的C++扩展的导出函数形式一般如下:
void Method(const FunctionCallbackInfo<Value>& args) {
Isolate* isolate = args.GetIsolate();
args.GetReturnValue().Set(String::NewFromUtf8(isolate, "world"));
}
如果参数为字符串,转为v8 的String类型,判断如下:
Local<Value> arg = args[0];
if (arg->IsString()){
Local<String> ss = arg->ToString();
}
// IsString() ToString() 是v8::Value类的函数
接着,可以将v8::String类型转为 String::Utf8Value类型
String::Utf8Value value(ss);
// String::Utf8Value的构造函数参数类型为Local<v8::Value>,所以可以直接传入ss
然后,String::Utf8Value类型转为char* 或者const char*
char * cc = *value;
// String::Utf8Value 的函数
// char* operator* ()
// const char* operator* () const
4 参考文档:
node的C++扩展官方文档:https://nodejs.org/dist/latest-v8.x/docs/api/addons.html