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

Posted

技术标签:

【中文标题】如何在c ++中将数组字节转换为字符串?【英文标题】:How to convert array byte to string in c ++? 【发布时间】:2019-09-11 20:33:45 【问题描述】:
byte S[5] = 0x48, 0x00, 0x65, 0x00, 0x6C

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

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

我尝试了各种方法,但都没有解决。

    String^ a = System::Convert::ToString(S); std::string s(reinterpret_cast <const char*> (S), 5);

输出一个完全不同的字符串。我该怎么办?

【问题讨论】:

String^ a = System::Convert::ToString(S); 看起来不像 C++。 为什么要打印hello?数组中有两个 0x00,它们都是空终止符。 您使用的是什么编码? ASCII 是 7 位。 添加了“c++-cli”标签,因为String^ 不是纯 C++ 的有效语法,但适用于 Microsoft 憎恶。 有什么阻止你使用暴力方法吗?例如遍历数组,如果字节不是nul,则追加到字符串中。 【参考方案1】:

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

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

byte S[5] = 0x48, 0x00, 0x65, 0x00, 0x6C;

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

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

如果您使用 .Net 数组对象,调用它会更容易一些,因为数组类知道它的长度。

array<Byte>^ S = gcnew array<Byte>  0x48, 0x00, 0x65, 0x00, 0x6C ;
String^ str = Encoding::Unicode->GetString(S);

【讨论】:

以上是关于如何在c ++中将数组字节转换为字符串?的主要内容,如果未能解决你的问题,请参考以下文章

如何在C ++中将字节数组中的整数转换为数字

如何在 C 中将字节数组转换为十六进制字符串?

如何在C#中将IntPtr转换为字节数组?

如何在php中将字节数组转换为整数?

如何在 c#.net 中将结构转换为字节数组,但结构大小仅在运行时定义

如何在lua中将UTF8字节数组转换为字符串