gpt4 book ai didi

c++ - 汇编中的字符串长度例程替代 C++ 中的 strlen

转载 作者:行者123 更新时间:2023-11-27 23:27:11 28 4
gpt4 key购买 nike

我现在正面临 strlen 的某些问题(在很多情况下我读取文件并且字符串不是零终止的)。所以我正在考虑制作一个汇编例程来计算我的字符串的长度。我要做的就是从字符串的末尾向后移动,直到遇到我的第一个字符,然后计算字符串的长度。事实上,我已经有一个我以前写汇编程序时写的。

现在,我想知道,我有什么理由不应该这样做吗?我会失去任何特别的优势吗?

另一个替代方法是让我的字符数组的每个成员都为空。我可以一次汇编 4 个字节,甚至可以通过一个简单的 for 循环来做到这一点。

请记住,我说的是相当大的数组 [64k]。相当长的处理必须非常快,因为我需要在用户选择文件后立即显示它。

编辑:澄清一下,说我知道我知道字符串的长度,我的意思是:

char* buffer = new char[length];

我知道长度。但是当我填充这个缓冲区时,我不知道它有 ascii 字符的确切长度。当我使用 strlen 时,它没有给我当前的长度。 length 基本上可以是 500,但其中只能有 5 个有效字符,其余 495 个可能是垃圾值。

最佳答案

Now, I would like to know, is there any reason why I shouldn't do this?

是的。如果您已经知道字符串的结束字节及其开头,那么您知道它的长度:

const char *begin = //beginning.
const char *end = //last byte of string.
ptrdiff_t stringLength = (end - begin) + 1;

+1 是因为 end 指向字符串的最后一个字节。如果 end 是最后一次,您就不需要 +1。不需要任何例程来计算您已经知道的东西。

请注意,这假设字符串是 ASCII 或其他一些单字节字符编码。如果您使用某种 Unicode 编码(UTF-8、UTF-16 等),那么您必须扫描字符串以确定它有多少个代码点。

当然,如果它是 Unicode 编码,则需要解决“长度”的确切含义的问题。 “长度”可以是“代码点数”、“不同字素数”甚至“编码中的代码单元数”。

关于c++ - 汇编中的字符串长度例程替代 C++ 中的 strlen,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8479401/

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