gpt4 book ai didi

Node.js buffer.copy() api 看起来很奇怪,与 C 中的 memcpy 不相似

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

我对 Node.js 中的 Buffer.copy api 缓冲区索引的含义感到有点困惑。我期望它与 C/Unix 中的 memcpy 类似,但似乎并非如此

根据 API 文档和 http://nodejs.org/docs/latest/api/buffers.html#buffer.copy 中提供的示例

buffer.copy(targetBuffer, [targetStart], [sourceStart], [sourceEnd]) 

表示targetStart不是targetBuffer中的索引,索引从0开始,sourceStart也是如此。相反,索引似乎从 1 而不是 0 开始。最令人困惑的是 sourceEnd。从示例来看,sourceEnd字节之前的字节都被复制了,那么最后一个字节将如何复制

node.js 文档中的示例是示例:构建两个缓冲区,然后将 buf1 从字节 16 到字节 19 复制到 buf2,从 buf2 中的第 8 个字节开始。为此,声明是

buf1 = new Buffer(26);
buf2 = new Buffer(26);
buf1.copy(buf2, 8, 16, 20);

如果我想复制到第 26 个字节,是否需要指定 27 作为 sourceEnd ?看起来很奇怪,我需要提供一个大于源缓冲区长度的值

有人可以清楚地解释为什么 node.js 选择这种行为而不是保持与 memcpy 类似吗?

最佳答案

选择这些(可能令人困惑的)索引约定的原因可能与核心 JavaScript 函数(例如 String.slice)设定的先例有关。 .

记住,node.js 是基于 JavaScript 的,毕竟不是 C/POSIX =)

关于Node.js buffer.copy() api 看起来很奇怪,与 C 中的 memcpy 不相似,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8804809/

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