Service_NSSM/CC_SDK/Include/basic/CCByteArray.h
2025-09-27 14:24:18 +08:00

260 lines
9.0 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef CCBYTE_CCBYTEARRAY_H
#define CCBYTE_CCBYTEARRAY_H
#include "CCByte.h"
#include "CCEncode.h"
#include "CCVector.h"
typedef long long ByteHander;
#define HanderSize sizeof(ByteHander)
namespace CTL {
/**
* ByteArray类用于处理字节数组提供多种方式的字节操作和转换。
*/
class ByteArray
{
private:
std::vector<Byte> bytes;
public:
// 默认构造函数
ByteArray() = default;
/**
* 构造函数从std::string初始化字节数组。
* @param str 用于初始化字节数组的字符串。
*/
ByteArray(const std::string& str);
/**
* 构造函数从C风格字符串初始化字节数组。
* @param str 用于初始化字节数组的C风格字符串。
*/
ByteArray(const char* str);
/**
* 复制构造函数从另一个ByteArray对象初始化字节数组。
* @param other 用于初始化的另一个ByteArray对象。
*/
ByteArray(const ByteArray& other);
/**
* 构造函数从std::vector<Byte>初始化字节数组。
* @param bytes 用于初始化字节数组的vector。
*/
ByteArray(const std::vector<Byte>& bytes);
/**
* 构造函数从std::list<Byte>初始化字节数组。
* @param bytes 用于初始化字节数组的list。
*/
ByteArray(const std::list<Byte>& bytes);
/**
* 构造函数从Byte指针初始化字节数组。
* @param bytes 用于初始化字节数组的Byte指针。
*/
ByteArray(const Byte* bytes);
/**
* 构造函数,从初始化列表初始化字节数组。
* @param initList 用于初始化字节数组的初始化列表。
*/
ByteArray(std::initializer_list<Byte> initList);
/**
* 添加一个字节到字节数组末尾。
* @param byte 要添加的字节。
*/
void add(Byte byte);
/**
* 获取指定索引处的字节。
* @param index 字节的索引。
* @return 指定索引处的字节。
*/
Byte get(int index) const;
/**
* 设置指定索引处的字节。
* @param index 要设置字节的索引。
* @param byte 要设置的新字节。
*/
void set(int index, Byte byte);
/**
* 删除指定索引处的字节。
* @param index 要删除字节的索引。
*/
void remove(int index);
/**
* 获取字节数组的大小。
* @return 字节数组的大小。
*/
[[nodiscard]] size_t size() const;
/**
* 清空字节数组。
*/
void clear();
/**
* 用指定的缓冲区和大小赋值字节数组。
* @param buffer 指定的缓冲区。
* @param size 缓冲区的大小。
*/
void assign(char * buffer, ByteHander size);
/**
* 用指定的缓冲区和大小赋值字节数组。
* @param buffer 指定的缓冲区。
* @param size 缓冲区的大小。
*/
void assign(char * buffer, unsigned int size);
// /**
// * 用指定的缓冲区和大小赋值字节数组。
// * @param buffer 指定的缓冲区。
// * @param size 缓冲区的大小。
// */
// void assign(char * buffer, int size);
#ifdef __linux__
/**
* 用指定的缓冲区和大小赋值字节数组。
* @param buffer 指定的缓冲区
* @param size 缓冲区的大小。
*/
// void assign(char* buffer, std::ptrdiff_t size);
#endif
/**
* 在字节数组末尾追加一个字符串。
* @param str 要追加的字符串。
*/
void append(const std::string& str);
/**
* 在字节数组末尾追加另一个字节数组。
* @param str 要追加的字节数组。
*/
void append(const ByteArray& str);
/**
* 在字节数组末尾追加另一个数组列表。
* @param initList 要追加的数组列表。
*/
void append(std::initializer_list<Byte> initList);
/**
* 返回字节数组的开始迭代器。
* @return 字节数组的开始迭代器。
*/
std::vector<Byte>::iterator begin();
/**
* 返回字节数组的结束迭代器。
* @return 字节数组的结束迭代器。
*/
std::vector<Byte>::iterator end();
/**
* 返回常量字节数组的开始迭代器。
* @return 常量字节数组的开始迭代器。
*/
std::vector<Byte>::const_iterator begin() const;
/**
* 返回常量字节数组的结束迭代器。
* @return 常量字节数组的结束迭代器。
*/
std::vector<Byte>::const_iterator end() const;
/**
* 从字符串创建字节数组。
* @param str 用于创建字节数组的字符串。
* @return 从字符串创建的字节数组。
*/
static ByteArray fromString(const std::string& str);
/**
* 将字节数组转换为字符串。
* @return 字节数组的字符串表示。
*/
std::string toString() const;
/**
* 将字节数组按指定编码格式转换为字符串。
* @param EncodeStr 编码格式,默认为"GBK"。
* @return 按指定编码格式转换后的字符串。
*/
std::string Format(const std::string& EncodeStr = "GBK") const;
/**
* 将字节数组按指定编码格式转换为新的字节数组。
* @param EncodeStr 编码格式,默认为"GBK"。
* @return 按指定编码格式转换后的新的字节数组。
*/
ByteArray toFormat(const std::string& EncodeStr = "GBK") const;
/**
* 获取字节数组的底层vector。
* @return 字节数组的底层vector。
*/
std::vector<Byte> data();
/**
* 获取字节数组的缓冲区。
* @return 字节数组的缓冲区。
*/
char* buffer();
/**
* 获取字节数组的缓冲区。
* @return 字节数组的缓冲区。
*/
[[nodiscard]] const char* buffer() const;
/**
* 调整字节数组的大小。
* @param len 新的大小。
*/
void resize(size_t len);
/**
* 赋值运算符重载,用于字节数组之间的赋值。
* @param other 要赋值的另一个字节数组。
*/
void operator = (const ByteArray& other);
/**
* 赋值运算符重载,用于字符串到字节数组的赋值。
* @param str 要赋值的字符串。
*/
void operator = (const std::string& str);
/**
* 赋值运算符重载,用于列表到字节数组的赋值。
* @param initList 要赋值字节数组的初始化列表。
*/
void operator = (std::initializer_list<Byte> initList);
/**
* 比较运算符重载,用于比较两个字节数组是否相等。
* @param other 要比较的另一个字节数组。
* @return 如果两个字节数组相等则返回true否则返回false。
*/
bool operator == (const ByteArray& other) const;
/**
* 比较运算符重载,用于比较两个字节数组是否不相等。
* @param other 要比较的另一个字节数组。
* @return 如果两个字节数组不相等则返回true否则返回false。
*/
bool operator != (const ByteArray& other) const;
/**
* 加法运算符重载,用于追加另一个字节数组到当前字节数组末尾。
* @param other 要追加的另一个字节数组。
*/
void operator += (const ByteArray& other);
/**
* 减法运算符重载,用于从当前字节数组中移除另一个字节数组的内容。
* @param other 要移除的另一个字节数组。
*/
void operator -= (const ByteArray& other);
};
/**
* 在字节数组末尾追加另一个字节数组。
* @param str 要追加的字节数组。
*/
inline void ByteArray::append(const ByteArray &str) {
bytes.insert(bytes.end(), str.bytes.begin(), str.bytes.end());
}
/**
* 重载流插入运算符,用于输出字节数组。
* @param os 输出流。
* @param arr 要输出的字节数组。
* @return 输出流。
*/
inline std::ostream& operator<<(std::ostream& os, const ByteArray& arr) {
os << "[";
for (size_t i = 0; i < arr.size(); ++i) {
if (i != 0) {
os << ", ";
}
os << static_cast<int>(arr.get(i).get());
}
os << "]";
return os;
}
}
#endif