比较 UTF-8 字符
Compare UTF-8 characters
这是一个解析函数:
double transform_units(double val, const char* s)
{
cout << s[0];
if (s[0] == 'm') return val * 1e-3;
else if (s[0] == 'µ') return val * 1e-6;
else if (s[0] == 'n') return val * 1e-9;
else if (s[0] == 'p') return val * 1e-12;
else return val;
}
在带有“µ”的行中,我收到了警告:
warning: multi-character character constant [-Wmultichar]
字符“µ”未被捕获。
如何比较多字节字符?
编辑:一个肮脏的解决方法是检查它是否小于零。正如 Giacomo 提到的,它是 0xCE 0xBC
,这两个字节都大于 127,因此小于零。它对我有用。
How to compare multibyte characters?
您可以通过使用多个字节来比较由多个字节(更一般地,多个代码单元)组成的unicode代码点。 s[0]
只是一个 char
,它是一个字节的大小,因此它本身不能包含多个字节。
这可能有效:std::strncmp(s, "µ", std::strlen("µ")) == 0
。
这是一个解析函数:
double transform_units(double val, const char* s)
{
cout << s[0];
if (s[0] == 'm') return val * 1e-3;
else if (s[0] == 'µ') return val * 1e-6;
else if (s[0] == 'n') return val * 1e-9;
else if (s[0] == 'p') return val * 1e-12;
else return val;
}
在带有“µ”的行中,我收到了警告:
warning: multi-character character constant [-Wmultichar]
字符“µ”未被捕获。
如何比较多字节字符?
编辑:一个肮脏的解决方法是检查它是否小于零。正如 Giacomo 提到的,它是 0xCE 0xBC
,这两个字节都大于 127,因此小于零。它对我有用。
How to compare multibyte characters?
您可以通过使用多个字节来比较由多个字节(更一般地,多个代码单元)组成的unicode代码点。 s[0]
只是一个 char
,它是一个字节的大小,因此它本身不能包含多个字节。
这可能有效:std::strncmp(s, "µ", std::strlen("µ")) == 0
。