std::string_view 的使用

This commit is contained in:
2026-06-29 09:40:55 +08:00
parent cd446b7ca8
commit 8daf67aa5d
52 changed files with 1420 additions and 1367 deletions
+8 -7
View File
@@ -4,6 +4,7 @@
#include <regex>
#include <sstream>
#include <stdexcept>
#include <string_view>
// 2025-01-02 05:01:50 [info] 1a480118 9607f81e f020 3a24 67761dbd 1a9ecbf8
// 5655c75b 00601307
#include <algorithm>
@@ -95,8 +96,8 @@ const bool is_big_endian = []() {
auto *p = reinterpret_cast<uint8_t *>(&x);
return p[0] == 0x01; // 如果 p[0] 为 0x01,说明是大端字节序
}();
std::vector<std::string> split(const std::string &str,
const std::string &delimiter) {
std::vector<std::string> split(std::string_view str,
std::string_view delimiter) {
std::vector<std::string> tokens;
size_t start = 0;
size_t end = str.find(delimiter);
@@ -110,7 +111,7 @@ std::vector<std::string> split(const std::string &str,
tokens.push_back(str.substr(start)); // Add the last token
return tokens;
}
std::string bin2mem(const std::string &bin) {
std::string bin2mem(std::string_view bin) {
const size_t len = bin.size();
if (len % 8 != 0) {
throw std::invalid_argument("binary string length must be a multiple of 8");
@@ -395,7 +396,7 @@ TEST(Bi222, xor_hex_Ex) {
#endif
// 将字节序从大端转换到当前平台字节序,并复制到目标内存中
void big_endian_2_platform(const std::string &big_endian, char *dest) {
void big_endian_2_platform(std::string_view big_endian, char *dest) {
// 先复制原始数据
std::string result = big_endian;
// 如果当前平台是小端,反转数据
@@ -405,14 +406,14 @@ void big_endian_2_platform(const std::string &big_endian, char *dest) {
// 将转换后的数据拷贝到目标内存中
std::memcpy(dest, result.data(), result.size());
}
std::string big_endian_2_platform(const std::string &big_endian) {
std::string big_endian_2_platform(std::string_view big_endian) {
std::string result;
result.resize(big_endian.size());
big_endian_2_platform(big_endian, result.data());
return result;
}
// 将字节序从小端转换到当前平台字节序,并复制到目标内存中
void little_endian_2_platform(const std::string &little_endian, char *dest) {
void little_endian_2_platform(std::string_view little_endian, char *dest) {
// 先复制原始数据
std::string result = little_endian;
// 如果当前平台是大端,反转数据
@@ -422,7 +423,7 @@ void little_endian_2_platform(const std::string &little_endian, char *dest) {
// 将转换后的数据拷贝到目标内存中
std::memcpy(dest, result.data(), result.size());
}
std::string little_endian_2_platform(const std::string &little_endian) {
std::string little_endian_2_platform(std::string_view little_endian) {
std::string result;
result.resize(little_endian.size());
big_endian_2_platform(little_endian, result.data());