2009-03-06 3 views

ответ

2

Итерации по массиву и проверка того, что каждый символ не попадает в диапазон от 128 до 255?

+0

+1 за то, что на 36 секунд быстрее меня ;-). –

+4

Ascii глупый вопрос получить глупый Ansi. +1 –

+0

-1, char часто подписывается. В этом случае char (130) <129! – MSalters

0

Проверьте значения, что они не являются отрицательными

13

Пожалуйста, помните, что нет такого понятия, как расширенный ASCII. ASCII был и определяется только между 0 и 127. Все вышеприведенное это либо неверно, либо должно быть в определенной кодировке, отличной от ASCII (например, ISO-8859-1).

The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!).

Кроме этого: что не так, итерации по нему и проверка на любое значение> 127 (или < 0 при использовании подписанных char)?

+0

-1 за то, что вы совершенно неправы: http://en.wikipedia.org/wiki/Extended_ASCII – shoosh

+1

@shoosh: снова прочитайте свою ссылку: «Использование этого термина иногда критикуется, потому что его можно ошибочно интерпретировать, что стандарт ASCII был обновлен, чтобы включить более 128 символов или что этот термин однозначно идентифицирует одну кодировку, оба из которых не соответствуют действительности » –

+0

@shoosh: я знаю, что некоторые кодировки могут быть совместно обозначены как« расширенные ASCII », но всякий раз, когда я см., что кто-то использует этот термин, они обычно этого не знают. Поэтому я препятствую его использованию и пытаюсь уточнить, где я его использую. –

0
bool detect(const signed char* x) { 
    while (*x++ > 0); 
    return x[-1]; 
} 
2

Убедитесь, что вы знаете, порядок следования байтов машины в вопросе, и просто проверить старший бит с побитового И маской:

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

Но есть, вероятно, локали функции, которые вы должны использовать для этого , Еще лучше, ЗНАЙ, какие данные кодирования символов поступают как. Попытка угадать, это похоже на попытку угадать формат данных, поступающих в поля вашей базы данных. Это может произойти, но мусор, мусор.

+0

hi Lee B. Мое приложение действует как промежуточное ПО между интерфейсом java и программным обеспечением DCE. сервер DCE заполняет некоторый символ нежелательной почты в outparam средней посуды. я должен отправить содержимое пара в FE. при отправке мусорного ящика, ядро ​​промежуточного хранилища. – ilan

+0

Мне нужно преобразовать char * из DCE в строку, а затем передать его передним интерфейсом. – ilan

+0

Вам лучше наложить 128 на char, иначе ch будет преобразован в int, и в этом случае 128 больше не будет битом. – MSalters

6

Char может быть подписан или без знака. Это не имеет большого значения. Вы действительно хотите проверить, действительно ли каждый символ ASCII. Это положительная, недвусмысленная проверка. Вы просто проверяете, есть ли каждый символ> = 0 и < = 127. Все остальное (положительное или отрицательное, «Extended ASCII» или UTF-8) является недопустимым.

1

Неужели никто не использует isascii?

char c = (char) 200; 

if (isascii(c)) 
{ 
    cout << "it's ascii!" << endl; 
} 
else 
{ 
    cout << "it's not ascii!" << endl; 
} 
Смежные вопросы