适用于字节数组的 C++ 类(如字符上的字符串)

Posted

技术标签:

【中文标题】适用于字节数组的 C++ 类(如字符上的字符串)【英文标题】:C++ Class that works on array of bytes (like string on chars) 【发布时间】:2014-05-15 05:10:57 【问题描述】:

是否有任何可以像字符串一样使用的 c++ 类。哪个有比较器等所需的所有东西? 我希望有类似字符串类的东西,它适用于字节数组而不是字符。我只是问,因为我不想再写已经存在的东西。我将在 std::map 等中使用这个类。

【问题讨论】:

std::vector 有比较器。什么是“等”? sizeof(char) is 1 (it is one byte in size) @BenjaminLindley 等是其他标准模板。但大多数情况下我会使用地图。我想知道将它存储在向量中是否有效?这个案例没有具体的类吗? 我在第二句中指的是“比较器等”中的等。换句话说,除了比较器之外,您还对哪些其他操作感兴趣?因为比较器被覆盖了。是的,向量和字符串一样有效。它们都是连续的序列容器。 【参考方案1】:

这正是std::string 的含义。 char 本质上是 byte。它占用一个字节的空间,并接受所有逻辑和按位运算符(位移:<<>>;逻辑比较:&|;等等)。

如果出于某种原因您需要 std::string 之类的东西,但对于不同的数据类型,只需使用 std::basic_string<DATATYPE>。在 STL 中,string itself is a typedef for basic_string<char>

【讨论】:

但我想 basic_string 使用 strlen 和许多其他与 char* 相关的函数。其中许多函数使用 '\0' 作为数组的结尾。但在我的情况下,当我使用 byte 作为类型时,'\0' 可以位于数组中间的某个位置,而不必位于末尾。 @nosbor 不,basic_string 不使用 strlen() 或其他 c-string 函数。 basic_string<char> 被称为 C++ 字符串;它不需要空终止符,您可以在其中任意放置任意数量的空字节。【参考方案2】:

c++ 中没有 byte 这样的东西。您可以将std::vectorunsigned char 一起使用,其效果类似于Java 中的字节。

typedef unsigned char BYTE;
typedef std::vector<BYTE> ByteString;

【讨论】:

我现在无法查看。是否有机会将其用作 std::map 键类型?我的意思是 std::map var;它会有效地工作吗? 这和std::stringunsigned char一样,你可以使用它,我猜效率将相当于string版本,但主要取决于你如何使用它。跨度> 一个std::vector真的不是这里需要的,也绝对和std::string不一样。有several reasons a basic_string&lt;&gt; is better,更何况这是OP要求的。

以上是关于适用于字节数组的 C++ 类(如字符上的字符串)的主要内容,如果未能解决你的问题,请参考以下文章

萌新笔记——C++里将string类字符串(utf-8编码)分解成单个字(可中英混输)

将 C# char 数组传递给 C++ 与字节数组不同

Java中的字节流和字符流区别

Java中的字节流和字符流区别

循环字节数组仅适用于[关闭]

字符流字节流节点流处理流详释