Javascript 从C+转换缓冲区+;转换为node.js中的utf-8字符串 我有C++编写的服务器端代码,返回一个字符串。客户端代码托管在express中。客户端代码具有以下端点调用: router.post( '/returnMyStringFromCPlusPlus', ( request, response ) => { var returnedValue; try { var returnBuf = new Buffer.alloc( 512, 0 ); // this will fill buffer with 0 returnedValue= serverSideCode.returnMyStringFromCPlusPlus(); ... }

Javascript 从C+转换缓冲区+;转换为node.js中的utf-8字符串 我有C++编写的服务器端代码,返回一个字符串。客户端代码托管在express中。客户端代码具有以下端点调用: router.post( '/returnMyStringFromCPlusPlus', ( request, response ) => { var returnedValue; try { var returnBuf = new Buffer.alloc( 512, 0 ); // this will fill buffer with 0 returnedValue= serverSideCode.returnMyStringFromCPlusPlus(); ... },javascript,c++,node.js,buffer,Javascript,C++,Node.js,Buffer,当我得到这个returnedValue时,我看到它是一个缓冲区。我通过测试进行了双重检查: console.log(returnedValue instanceof buffer); 这显然是真的。问题是我无法将缓冲区转换为文本!我试过: 字符串解码器: const StringDecoder=require(“字符串解码器”).StringDecoder const decoder = new StringDecoder( "utf-8" ) co

当我得到这个returnedValue时,我看到它是一个缓冲区。我通过测试进行了双重检查:

     console.log(returnedValue instanceof buffer);
这显然是真的。问题是我无法将缓冲区转换为文本!我试过:

字符串解码器: const StringDecoder=require(“字符串解码器”).StringDecoder

        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上问过很多问题,通常最后都会回答我自己的问题,但我很好奇你们中是否有人见过这一点。我不知道如何解决这个问题,已经做了一天多了

我预期的问题

           var printMe =  String.fromCharCode.apply(null, new Uint16Array(returnCode));
           console.log(printMe)
使用节点版本11(也尝试了12和13) 使用x64版本的VisualStudio 这不重要,但是从C++返回的代码是:
   #include <string>
   string testThis()
    {
   string testIfThisWorks = "TestIfThisWorks";
   return testIfThisWorks;
   }
#包括
字符串testThis()
{
字符串testIfThisWorks=“testIfThisWorks”;
归还作品;
}

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

  • 将参数从客户端node.js传递到服务器端C++
  • 更改服务器端的值
  • 返回相同的论点

  • 然后在C端操作这个值,并将其作为字符串返回 所以我知道这几乎是7个月后的事了,但我最终还是找到了解决这个问题的办法。我不认为这是理想的,如果我找到一个更好的建议,我仍然愿意接受,但我找到了一种黑客的方式来做到这一点。我最后做的是:

  • 将参数从客户端node.js传递到服务器端C++
  • 更改服务器端的值
  • 返回相同的论点

  • 然后在C端操作这个值,并将其作为字符串返回。您已经提到字符串应该是UTF-8格式的。您是否尝试过
    console.log(returnedValue.toString('utf8'))?您是否尝试打印该缓冲区?我的意思是值,不是一个类型。…@igor.code这两个都不起作用。您已经提到字符串应该在UTF-8中。您是否尝试过
    console.log(returnedValue.toString('utf8'))?您是否尝试打印该缓冲区?我指的是数值,不是一种类型。…@igor.code这两种代码都不起作用。