我有用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();
...
}
当我返回这个returnValue时,我看到它是一个缓冲区。我通过测试进行了仔细检查:
console.log(returnedValue instanceof buffer);
显然返回true。问题是我无法将该缓冲区输入文本!我试过了:
字符串解码器:
const StringDecoder = require(“string_decoder”).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上问问题的运气,而且通常最终都会回答我自己的问题,但是我很好奇如果你们中的任何人以前见过这个问题。我不知道如何解决这个问题,并且已经做了一天多了。
我期望的问题
使用节点版本11(也尝试12和13)
使用x64版本的Visual Studio
没关系,但是从C++返回的代码实际上是:
#include <string>
string testThis()
{
string testIfThisWorks = "TestIfThisWorks";
return testIfThisWorks;
}
这是在Windows 10上
最佳答案
因此,我知道这将近7个月后,但是我最终还是回过头来找到解决该问题的方法。我不认为这是理想的选择,但如果找到建议,仍然可以接受更好的建议,但是我发现这样做有些拙劣。我最终要做的是:
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
关于javascript - 将缓冲区从C++转换为node.js中的utf-8字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59400765/