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) но без толку.
На форуме не искал, потому что не знаю даже какую строку поиска использовать.
Есть идеи как это вылечить?
Точно уже не помню, но у меня пляска такая была не только в Builder,но и в процессорах на совсем другом компиляторе.
Ни у кого кода не осталось на этот случай?
Цитата: b00taNik
На форуме не искал, потому что не знаю даже какую строку поиска использовать.
Есть идеи как это вылечить?
Вам бы стоило во первых прочесть правила форнума - во вторых - тему надо было назвать - и "снова глупый пингвин прячет тело жирное в утесах".
Размерность типа char тоже стоит посмотреть - и принципы работы с ним.
Заслуженное нарушение ждать себе не заставит.
Кстати как показывает практикеа это лечится редко - но иногда бывает.