В последний день в моем коде была неприятная ошибка, которая после некоторого поиска, похоже, связана со сравнением значений char и hex.Мой компилятор - gcc 4.4.1, работающий на Windows.Я повторил проблему в следующем простом коде:
char c1 = 0xFF; char c2 = 0xFE;
if(c1 == 0xFF && c2 == 0xFE)
{
//do something
}
Удивительно, но приведенный выше код не попадает в цикл.Я понятия не имею, почему и был бы очень признателен за помощь в этом.Это настолько абсурдно, что решение должно быть (как всегда) огромной ошибкой с моей стороны, которую я полностью упустил из виду.
Если я заменю вышеприведенные символы без знака, это сработает, но только в некоторых случаях.Я изо всех сил пытаюсь выяснить, что происходит.Кроме того, если я приведу шестнадцатеричные значения к символу сравнения, он будет правильно введен в цикл:
if(c1 == (char)0xFF && c2 == (char)0xFE)
{
//do something
}
Что это значит?Почему это может происходить?Разве необработанное шестнадцатеричное значение не интерпретируется как символ по умолчанию?Для любопытного момента в моем коде, где я впервые заметил, это сравнение первых 2-х байтов потока с вышеуказанным шестнадцатеричным значением и их обратная идентичность метке порядка байтов.
Любая помощь приветствуется