【发布时间】:2009-03-06 10:15:45
【问题描述】:
如何检测 C++ 字符数组中是否存在扩展 ASCII 值(128 到 255)。
【问题讨论】:
标签: c++ extended-ascii
如何检测 C++ 字符数组中是否存在扩展 ASCII 值(128 到 255)。
【问题讨论】:
标签: c++ extended-ascii
请记住,没有扩展 ASCII 这样的东西。 ASCII 过去和现在仅定义在 0 到 127 之间。以上所有内容要么无效,要么需要使用 ASCII 以外的已定义编码(例如 ISO-8859-1)。
除此之外:迭代它并检查任何大于 127 的值(或使用签名 chars 时为
【讨论】:
Char 可以有符号或无符号。不过,这并不重要。您实际上想检查每个字符是否是有效的 ASCII。这是一个积极的、明确的检查。您只需检查每个字符是否同时 >=0 和
【讨论】:
现在没有人使用 isascii 了吗?
char c = (char) 200;
if (isascii(c))
{
cout << "it's ascii!" << endl;
}
else
{
cout << "it's not ascii!" << endl;
}
【讨论】:
确保您知道相关机器的字节顺序,并使用按位与掩码检查最高位:
if (ch & 128) {
// high bit is set
} else {
// looks like a 7-bit value
}
但您可能应该为此使用一些语言环境功能。更好的是,知道输入的字符编码数据是什么。试图猜测它就像试图猜测进入数据库字段的数据格式。它可能会进,但垃圾进,垃圾出。
【讨论】:
遍历数组并检查每个字符是否不在 128 到 255 范围内?
【讨论】:
检查它们不是负数的值
【讨论】:
bool detect(const signed char* x) {
while (*x++ > 0);
return x[-1];
}
【讨论】:
(char) c = (char) 200;
if (isascii(c))
{
cout << "it's ascii!" << endl;
}
else
{
cout << "it's not ascii!" << endl;
}
试试这个代码
【讨论】: