在 node.js 中将缓冲区从 C++ 转换为 UTF-8 字符串

converting buffer from C++ into utf-8 string in node.js

本文关键字:转换 C++ UTF-8 字符串 缓冲区 node js      更新时间:2023-10-16

我有用C++编写的服务器端代码,返回一个字符串。客户端代码以快递格式托管。客户端代码具有如下调用终结点:

router.post( '/returnMyStringFromCPlusPlus', ( request, response ) => { 
var returnedValue;
try {
var returnBuf = new Buffer.alloc( 512, 0 ); // this will fill buffer with 0
returnedValue= serverSideCode.returnMyStringFromCPlusPlus();
... 
}

当我得到这个返回的值时,我看到它是一个缓冲区。我通过测试仔细检查:

console.log(returnedValue instanceof buffer);

这显然是真的。问题是我无法将该缓冲区转换为文本!我试过:

String Decoder:const StringDecoder= require( "string_decoder" (.字符串解码器;

const decoder = new StringDecoder( "utf-8" )
console.log( decoder.write( returnedValue) );

toString((:

console.log(returnedValue.toString('ascii'));

String.fromCharCode

var printMe =  String.fromCharCode.apply(null, new Uint16Array(returnCode));
console.log(printMe)

老实说,我从来没有真正幸运地在StackOverFlow上提问,通常最终会回答我自己的问题,但是我很好奇你们中是否有人以前见过这个。我不知道如何解决这个问题,并且已经做了一天多了。

我期待的问题

使用节点版本 11(也尝试了 12 和 13( 使用 x64 版本的 Visual Studio 这应该没关系,但从 C++ 返回的代码实际上是:

#include <string>
string testThis()
{
string testIfThisWorks = "TestIfThisWorks";
return testIfThisWorks;
}

这是在 Windows 10 上

所以我知道这已经快 7 个月了,但我最终还是找到了解决这个问题的方法。我不认为这是理想的,如果我找到一个更好的建议,我仍然愿意接受更好的建议,但我找到了一种黑客的方式来做到这一点。我最终做的是:

  1. 将参数从客户端节点传入.js传递到服务器端C++
  2. 更改服务器端的值
  3. 返回相同的参数。
router.post( '/returnMyStringFromCPlusPlus', ( request, response ) => { 
var returnedValue;
try {
var returnBuf = new Buffer.alloc( 512, 0 ); // this will fill buffer with 0
var valueToChange = "valueToChange";
returnedValue= serverSideCode.returnMyStringFromCPlusPlus(valueToChange);
... 
}

然后,我将在 C 端操作此值并将其作为字符串返回。 <3