如何检测C ++字符数组中是否存在扩展ASCII值(128到255)。
答案 0 :(得分:18)
请记住,没有扩展ASCII这样的东西。 ASCII是和仅定义在0到127之间。上面的所有内容都是无效的,或者需要使用除ASCII之外的已定义编码(例如ISO-8859-1)。
除此之外:迭代它并检查任何值>有什么问题? 127(或使用签名char
时为< 0)?
答案 1 :(得分:7)
Char可以是签名或未签名。但这并不重要。您实际上想要检查每个字符是否是有效的ASCII。这是一个积极的,非模棱两可的检查。您只需检查每个字符是否都是> = 0和< = 127.其他任何内容(无论是正数还是负数,“扩展ASCII”或UTF-8)都无效。
答案 2 :(得分:2)
迭代数组并检查每个字符是否不在128到255范围内?
答案 3 :(得分:2)
确保您知道相关机器的字节顺序,并使用按位AND掩码检查最高位:
if (ch & 128) {
// high bit is set
} else {
// looks like a 7-bit value
}
但是你可能会使用区域设置功能。更好的是,知道字符编码数据的来源。试图猜测它就像试图猜测进入数据库字段的数据格式。它可能会进入,但垃圾进入,垃圾出来。
答案 4 :(得分:2)
是否有人再使用isascii了?
char c = (char) 200;
if (isascii(c))
{
cout << "it's ascii!" << endl;
}
else
{
cout << "it's not ascii!" << endl;
}
答案 5 :(得分:0)
检查它们不是负值的值
答案 6 :(得分:0)
bool detect(const signed char* x) {
while (*x++ > 0);
return x[-1];
}
答案 7 :(得分:-2)
{{1}}
试试这段代码