C++;扩展Ascii字符 如何检测在C++字符数组中存在扩展ASCII值(128到255)。< /P> < P>迭代数组,并检查每个字符不落在128到255范围内。 < P>检查它们不是负值< /P> < P>的值。请记住,没有扩展ASCII这样的东西。ASCII过去和现在仅定义在0和127之间。以上所有内容无效或需要采用ASCII以外的已定义编码(例如ISO-8859-1)

C++;扩展Ascii字符 如何检测在C++字符数组中存在扩展ASCII值(128到255)。< /P> < P>迭代数组,并检查每个字符不落在128到255范围内。 < P>检查它们不是负值< /P> < P>的值。请记住,没有扩展ASCII这样的东西。ASCII过去和现在仅定义在0和127之间。以上所有内容无效或需要采用ASCII以外的已定义编码(例如ISO-8859-1),c++,extended-ascii,C++,Extended Ascii,请阅读 除此之外:对其进行迭代并检查任何大于127的值有什么问题(或确保您知道所讨论的机器的终止性,只需使用按位and掩码检查最高位: if (ch & 128) { // high bit is set } else { // looks like a 7-bit value } 但是,您可能应该使用一些区域设置函数来实现这一点。更好的是,要知道字符编码数据是以什么形式输入的。尝试猜测它就像尝试猜测进入数据库字段的数据格式。它可能输入,但垃圾输入,垃圾输出。字符可以是有符号的

请阅读


除此之外:对其进行迭代并检查任何大于127的值有什么问题(或确保您知道所讨论的机器的终止性,只需使用按位and掩码检查最高位:

if (ch & 128) {
  // high bit is set
} else {
  // looks like a 7-bit value
}

但是,您可能应该使用一些区域设置函数来实现这一点。更好的是,要知道字符编码数据是以什么形式输入的。尝试猜测它就像尝试猜测进入数据库字段的数据格式。它可能输入,但垃圾输入,垃圾输出。

字符可以是有符号的或无符号的。这其实并不重要,你gh。实际上,您需要检查每个字符是否为有效的ASCII。这是一个积极的、无歧义的检查。您只需检查每个字符是否都>=0和是否有人不再使用isascii

char c = (char) 200;

if (isascii(c))
{
    cout << "it's ascii!" << endl;
}
else
{
    cout << "it's not ascii!" << endl;
}
charc=(char)200;
if(isascii(c))
{
cout
(char)c=(char)200;
if(isascii(c))
{

cout@shoosh:再次阅读您的链接:“该术语的使用有时会受到批评,因为它可能被错误地解释为ASCII标准已更新为包含128个字符以上,或者该术语明确地标识了一种编码,两者都是不真实的。”@我知道有些编码可以统称为“扩展ASCII”,但每当我看到有人使用这个术语,他们通常都不知道。所以我不鼓励使用这个术语,并试图澄清我在哪里看到它被使用。@m这是-1的最蹩脚的借口。@shoosh扩展ascii不是标准的。@beu:即使这个定义可以被认为是正确的,但它也是高度误导的,因为正如你所指出的,它没有引用“扩展ASCII”意味着它是某种ASCII,这是错误的。“基于ASCII的编码”、“ASCII兼容编码”或类似的术语更为正确。事实上,每次我听到“扩展ASCII”,我的第一反应就是问:“哪一种?”.hi Lee B.我的应用程序充当java前端和DCE后端应用程序之间的中间件。DCE服务器在中间件的输出参数中填充一些垃圾字符。我必须将输出参数内容发送给FE。在发送垃圾字符时,中间件转储核心。我必须将字符*从DCE转换为字符串,然后将其传递给FEn到前端。最好将128转换为char,否则ch将转换为int,在这种情况下,128不再是高位。“尝试此代码”不是一个很好的解释。为什么这可以解决问题?
char c = (char) 200;

if (isascii(c))
{
    cout << "it's ascii!" << endl;
}
else
{
    cout << "it's not ascii!" << endl;
}
(char) c = (char) 200;

if (isascii(c))
{
    cout << "it's ascii!" << endl;
}
else
{
    cout << "it's not ascii!" << endl;
}