如何在C++中将uint8_t *转换为std::string?

9

可能是重复问题:
如何在C++中将Byte*转换为std::string?

我正在使用嵌入式设备并尝试接收消息。 这个消息由一个const uint8_t* data和它的长度size_t len给出。

现在我需要一个std::string来输出我的数据。


看起来是这个的重复:https://dev59.com/5nI-5IYBdhLWcg3wy7sd - Jon
投票重新开放,因为这是来自 uint8_t 的内容,而另一个是 char,在一些不正常的设备上可能会有所不同。 - Ciro Santilli OurBigBook.com
3个回答

16
如果您不想转换编码,这个方法可行:
std::string s( data, data+len );

如果你想将UTF-8转换成你所在平台使用的其他系统编码,你需要使用一些特定于该平台的方法。


为什么第二个构造函数参数是data+len?难道不应该只是len吗? - undefined

1
你的uint8*字符串是否以空字符结尾?如果是的话,你可以这样做:
std::string mystring(data);

当数据有长度时,它很可能不是以空字符结尾的。 - Milan
最好明确指定它;反正再次搜索长度也没有什么意义。 - GManNickG
同时,您假设字符串中没有嵌入'\0'字符。 std :: string并不特别强调'\0'字符。 - Martin York

0

对于某些情况,sizeof(uint8) != sizeof(char),您可以这样做:

std::string output( len, 0 );
for ( size_t i = 0; i < len; ++i )
  output[ i ] = static_cast<char>( data[ i ] );

3
sizeof(uint8)!=sizeof(char)是不可能的。sizeofchar为单位计算大小,因此如果char大于8位,就不可能有一个8位类型,即uint8不存在。 - R.. GitHub STOP HELPING ICE

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接