gpt4 book ai didi

c++ - 有效地从缓冲区读取值

转载 作者:太空宇宙 更新时间:2023-11-04 13:23:41 24 4
gpt4 key购买 nike

我有一个 std::vector<char>在内存中使用特定偏移量的数字进行缓冲,例如

00 00 00 00 00 00 00 00 00 33 2E 31 34 99 99 99 .........3.14™™™

我知道读取 double /浮点值的结束和开始偏移量,但现在我正在用 std::copy() 复制相关部分进入 std::string然后调用std::stod .我的问题是:我怎样才能让它更快?

必须有一种方法来避免复制.. 例如:我可以将流指向另一个缓冲区中的特定偏移量吗?或者类似的东西

最佳答案

如果数字被分隔,那么像 Let_Me_Be 建议的那样直接在缓冲区上使用 strtod 是有效的。但是,由于数字不是 分隔的,因此您不能直接使用strtod

如果缓冲区以零(或eof)终止,那么你可以简单地修改它,通过在数字后面添加终止符,然后恢复原始字符,就像bolov建议的那样。由于结束偏移量是数字的一部分,因此它后面至少总是有终止符,所以 offset_end 不会溢出。以下代码假定 offset_end 是最后一个字符之后的一个。如果是最后一个字符,则只需使用 + 1

auto original = data[offset_end];
data[offset_end] = '\0';
auto result = strtod(&data[offset_start], nullptr);
data[offset_end] = original;

即使缓冲区没有终止,您仍然可以这样做,但前提是数字不在最后。如果是,或者如果您不知道缓冲区在哪里结束,或者缓冲区是 const,那么您当前的解决方案就是最有效的。

关于c++ - 有效地从缓冲区读取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34085336/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com