Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

И снова проблемы с преобразованием типов.

34K
13 мая 2009 года
b00taNik
2 / / 30.11.2007
Здравствуйте! Среда Программирования Borland C++ 6.0, OS - Win7(En)

Для чтения одного байта, задаваемого в шестнадцатеричном формате использую следующий код:

Код:
char GetByte(AnsiString what= "#d"){
      char Byte=0;
      AnsiString InpD="",
                Caption="Entering "+what, Text="Enter "+what,
                 NotValid="Not valid "+what+" value";
      bool CorrFlag=false;
      int val=0;
      do{
        CorrFlag=true;
        InpD=InputBox(Caption.c_str(), Text.c_str(), "0x00");
        sscanf(InpD.c_str(),"0x%x", &val);
        if(val<0 || val>0xFF){
                Application->MessageBoxA(NotValid.c_str(), "Invalid", MB_OK | MB_ICONERROR);
                CorrFlag=false;
        } else {
                Byte = val; // <----- ВОТ ЗДЕСЬ ПРОИСХОДИТ!!!!
        }
      } while (InpD.Length()<=0 || !CorrFlag);
      return Byte;
}



В той строчке, что прокомментированна "<----- ВОТ ЗДЕСЬ ПРОИСХОДИТ!!!!" случается странная вещь - маленький байтик из 0x00 превращается в 0xFFFFFF<правильное значение байта>.

Чтобы совсем было инетересно, такое происходит только если вводимое значение больше 0xF

Пробовал использовать вместо char AnsiString, делал прямое преобразование типов через (char) но без толку.

На форуме не искал, потому что не знаю даже какую строку поиска использовать.

Есть идеи как это вылечить?
479
13 мая 2009 года
Ухух
142 / / 05.05.2006
Я с таким сталкивался. Замучался искать почему. Именно в sscanf. Плюнул и стал ручками разбор делать - длинным столбцом if-ов.

Точно уже не помню, но у меня пляска такая была не только в Builder,но и в процессорах на совсем другом компиляторе.
34K
13 мая 2009 года
b00taNik
2 / / 30.11.2007
Это отрицательный момент :(
Ни у кого кода не осталось на этот случай?
1
13 мая 2009 года
kot_
7.3K / / 20.01.2000
Цитата: b00taNik

На форуме не искал, потому что не знаю даже какую строку поиска использовать.

Есть идеи как это вылечить?


Вам бы стоило во первых прочесть правила форнума - во вторых - тему надо было назвать - и "снова глупый пингвин прячет тело жирное в утесах".
Размерность типа char тоже стоит посмотреть - и принципы работы с ним.
Заслуженное нарушение ждать себе не заставит.

1
13 мая 2009 года
kot_
7.3K / / 20.01.2000
Кстати как показывает практикеа это лечится редко - но иногда бывает.

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог