我在我的C ++应用程序中嵌入了JavaScript(通过V8),我得到了一些我希望传递给JavaScript的原始二进制数据。现在,在JavaScript中,我计划对数据做一些正则表达式。
当我的数据仅使用标准JavaScript String
对象时,一切都非常简单。但是,据我所知,它使用UTF16表示并期望数据是有效的Unicode。但我有任意数据(可能包含'\0'
和其他原始数据 - 尽管它只是大部分文本。)
我应该如何处理?我搜索了一下,也许ArrayBuffer
或类似的东西是我需要存储原始数据的对象。但是,我没有找到如何在该对象上执行通常的正则表达式方法。 (基本上我需要RegExp.test
和RegExp.exec
)。
我刚刚查看了Node.js代码,看起来好像它们支持二进制数据,只是通过v8::String::NewFromOneByte
将它放入一个字符串中。请参阅here和here。这样就可以回答我的问题(即我可以使用String
),不是吗?有任何缺点吗?
(我仍然不明白为什么我的问题很糟糕。请解释一下downvote。)
答案 0 :(得分:0)
从我目前的所有测试中,看起来它与普通String
一样正常。
您甚至可以直接在JavaScript中指定,例如
var s = "\x00\x01\x02\x03"
并且该字符串上的正则表达式与预期的一样。
在C ++方面,如果要将二进制数据转换为JS String对象:
v8::Local<v8::String> jsBinary(const uint8_t* data, uint32_t len) {
assert(int(len) >= 0);
return String::NewFromOneByte(v8::Isolate::GetCurrent(), data, String::kNormalString, len);
}