小编Xig*_*gma的帖子

C++ std::stringstream 操作优化

我的情况如下:

  1. 我有一个二进制文件,正在使用 std::fstream 读取操作作为 (char*) 读取
  2. 我的目标是从文件中获取十六进制格式的每个字节,然后将其附加到字符串变量
  3. 字符串变量应保存按照第 2 项格式化的文件的全部内容。

例如,假设我有以下二进制文件内容:

D0 46 98 57 A0 24 99 56 A3

我格式化每个字节的方式如下:

stringstream fin;;

for (size_t i = 0; i < fileb_size; ++i)
{
fin << hex << setfill('0') << setw(2) << static_cast<uint16_t>(fileb[i]);
}

// this would yield the output "D0469857A0249956A3"

return fin.str();
Run Code Online (Sandbox Code Playgroud)

上述方法按预期工作,但是,对于大文件来说,它非常慢,据我所知;stringstream 用于输入格式!

我的问题是,有没有办法优化此类代码或我正在采取的方法?我唯一的限制是输出应该是字符串格式,如上所示。

谢谢。

c++ optimization stringstream

5
推荐指数
1
解决办法
1548
查看次数

::tolower 使用 std::transform

为什么 std::transform 不能以这种方式工作:

std::string tmp = "WELCOME";
std::string out = "";
std::transform(tmp.begin(), tmp.end(), out.begin(), ::tolower);
Run Code Online (Sandbox Code Playgroud)

出来是空的!

但这有效:

std::transform(tmp.begin(), tmp.end(), tmp.begin(), ::tolower);
Run Code Online (Sandbox Code Playgroud)

我不希望转变就地发生。

c++ transform std tolower

3
推荐指数
1
解决办法
327
查看次数

标签 统计

c++ ×2

optimization ×1

std ×1

stringstream ×1

tolower ×1

transform ×1