我可以使用memcmp两个比较多字节的字符串吗

Can i use memcmp two compare multibyte characters string?

本文关键字:比较 两个 多字节 字符串 可以使 memcmp 我可以      更新时间:2023-10-16

我正在尝试编写代码来比较两个字符串。在windows中,我可以使用strcmp,但我希望为多字节字符串编写,以便它与所有其他平台兼容我可以使用memcmp吗?如果没有,那么我可以使用任何其他API,或者我需要编写自己的API。

你必须小心。我不是Unicode/多字节编码方面的专家,但我知道在变音符号中,当两个字符串的字节不完全相同时,有时可以认为它们是相等的。建议使用预先测试过的API,因为字符串编码可能会变得非常混乱。

查看案例映射上的新旧内容。我想不出变音符号的参考,但如果我想了,我会发布它。

如果两个字符串使用相同的编码,则可以使用memcmp。如果它们使用UTF-8,并且字符串不包含NULL字符(U+0000),则您甚至可以使用strcmp,因为在没有NULL本身的情况下,0不会出现在UTF-8编码的字符串中。另一个选项是使用mbstowcs将字符串转换为宽字符。

如果字符串都使用相同的编码,memcmp将正常工作。但是,请记住,宽字符在不同的平台上有不同的大小。

如果字符串使用不同的编码,则需要ICU之类的库来处理它。