C++ cli 如何在c++中将数组字节转换为字符串?

C++ cli 如何在c++中将数组字节转换为字符串?,c++-cli,C++ Cli,我想知道如何将上面的字节数组转换成字符串 将上述字节数组转换为字符串时,应输出Hello 我尝试了各种方法,但根本解决不了问题 字符串^a=System::Convert::ToString; std::string sreu cast S,5; 输出一个完全不同的字符串。我该怎么办?首先:该字节数组不包含Hello。在UTF-16中编码5个Unicode字符所需的10个字节中,它看起来只有一半 要在.Net(包括C++/CLI)中的字节和字符串之间进行转换,需要使用类。根据此处显示的数据,您将

我想知道如何将上面的字节数组转换成字符串

将上述字节数组转换为字符串时,应输出Hello

我尝试了各种方法,但根本解决不了问题

字符串^a=System::Convert::ToString; std::string sreu cast S,5;
输出一个完全不同的字符串。我该怎么办?

首先:该字节数组不包含Hello。在UTF-16中编码5个Unicode字符所需的10个字节中,它看起来只有一半

要在.Net(包括C++/CLI)中的字节和字符串之间进行转换,需要使用类。根据此处显示的数据,您将希望使用。要将字节转换为字符串,请调用

因为您使用了[]语法,所以这是一个原始C数组,而不是.Net托管数组对象。因此,您需要使用接受原始指针和长度的重载

byte S[5] = {0x48, 0x00, 0x65, 0x00, 0x6C};
如果使用.Net数组对象,调用它会容易一些,因为array类知道它的长度

String^ str = Encoding::Unicode->GetString(S, 5);

字符串^a=System::Convert::ToString;看起来不像C++。为什么要打印?数组中有两个0x00,它们是ar空终止符。您使用的是什么编码?ASCII是7位。添加了C++ -CLI标签,因为String不是纯C++的有效语法,但对于微软可憎是有效的。有什么阻止你使用蛮力方法吗?例如,遍历数组,如果字节不是nul,则将其附加到字符串中。
String^ str = Encoding::Unicode->GetString(S, 5);
array<Byte>^ S = gcnew array<Byte> { 0x48, 0x00, 0x65, 0x00, 0x6C };
String^ str = Encoding::Unicode->GetString(S);