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

时间:2012-02-27 06:18:28

标签: c++ string multibyte memcmp

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

3 个答案:

答案 0 :(得分:5)

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

the old new thing on case mapping。我想不出变音符号的参考,但如果我这样做,我会发布它。

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

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