Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблема с получением правильного числа при конвертации.


Страницы:   1 2

Mouserx ©   (2006-07-28 14:57:00) 

Имееться число, например -90. Если представить 2-мя байтами в HEX виде, то будет FFA6.
Так вот, если "FFA6" у меня в виде строки, то при переводе в переменную типа integer мне дает 65446. а я хочу видеть - 90. Как правильно сделать?


Anatoly Podgoretsky   (2006-07-30 15:46:00) [1]

И тут Остапа понесло


GrayFace   (2006-07-30 05:45:00) [2]

Или так: si := smallint(word(StrToInt('$' + 'FFA6')));


palva   (2006-07-29 23:24:00) [3]

Логично сделать так:

{$APPTYPE CONSOLE}
uses SysUtils;
var
 si: SmallInt;
begin
 si := StrToInt('$' + 'FFA6');
 WriteLn(si);
end.


Или даже так:

 si := StrToInt('$' + 'FFA6') And $FFFF;


Ketmar   (2006-07-28 18:06:00) [4]

я про [11].


Mouserx   (2006-07-28 17:17:00) [5]


> Ketmar ©   (28.07.06 16:14) [19]
мда. а потом такой код пихают в программы...

Не такой. Это был просто тест. а точнее закрепление теории практикой.

У меня же на самом деле подходит Shortint  с диапазоном -128..127.
Просто в тех. задании одна и таже переменная фигурирует как 1 байт, но в 1 месте как 2 байта. Это ошибка и чуток сбила меня с толку, что начал все путать.
Пятница ... конец рабочего дня. Надо явно выключать компьютер и идти отдыхать. :-)


Ketmar   (2006-07-28 16:14:00) [6]

>Mouserx   (28.07.06 15:20) [13]
мда. а потом такой код пихают в программы...


sniknik   (2006-07-28 15:53:00) [7]

> левого бита в 16ричном числе
в смысле, тут же строковое представление, тут надо просто выделить символы у которых в числовом проедставлении левый бит установлен. т.е $8x, $9x, $Ax, ... $Fx где x дюбое число.


DprYg   (2006-07-28 15:50:00) [8]


var a : smallint;
begin
 a := smallint($FFA6);
 Form1.Caption := IntToStr(a);
end;


sniknik   (2006-07-28 15:49:00) [9]

> Подходящее решение нашел в [11]
а теперь сконвертируй аналогично 90 ....

тебе нужно делать анализ крайнего левого бита в 16ричном числе (он отвечает за знак), либо как советуют изначально конвертить в то длинну какого типа числа используеш.


Сергей М.   (2006-07-28 15:37:00) [10]


> Mouserx   (28.07.06 15:20) [13]


> Подходящее решение нашел


Плохое это решение.
Хорошее же ты получил бы при полной и грамотной постановке своей задачи.


Reindeer Moss Eater   (2006-07-28 15:22:00) [11]

Просто при изначальной конвертации в hex надо было сразу заказывать нужную длину что бы получался integer, а не  word


Mouserx   (2006-07-28 15:20:00) [12]

Все спасибо. Разобрался.
Подходящее решение нашел в [11]


Stanislav   (2006-07-28 15:18:00) [13]

DprYg ©   (28.07.06 15:11) [8]
Точно!


Сергей М.   (2006-07-28 15:15:00) [14]


> Mouserx   (28.07.06 15:13) [9]
>
>
> > Любой, размер которой не меньше 2-х байт.
>
> Integer же явно не меньше 2-х байт, но при этом такой код
> неработает как надо:
> var
> Value_str : String;
> Value : Integer;
>
> begin
> Value_str := 'FFA6';
> Value := StrtoInt('$'+ 'FFFF'+ Value_str);
> end;
>


Мефисто   (2006-07-28 15:13:00) [15]


> Mouserx   (28.07.06 15:06) [4]


Integer + F1

Generic integer types for 32-bit implementations of Delphi  
Type Range Format
Integer -2147483648..2147483647 signed 32-bit
Cardinal 0..4294967295 unsigned 32-bit
Fundamental integer types include Shortint, Smallint, Longint, Int64, Byte, Word, and Longword.

Fundamental integer types  
Type Range Format
Shortint -128..127 signed 8-bit
Smallint -32768..32767 signed 16-bit
Longint -2147483648..2147483647 signed 32-bit
Int64 -2^63..2^63-1 signed 64-bit
Byte 0..255 unsigned 8-bit
Word 0..65535 unsigned 16-bit
Longword 0..4294967295 unsigned 32-bit


Mouserx   (2006-07-28 15:13:00) [16]


> Любой, размер которой не меньше 2-х байт.

Integer же явно не меньше 2-х байт, но при этом такой код неработает как надо:
var
Value_str : String;
Value : Integer;

begin
Value_str := 'FFA6';
Value := StrtoInt('$'+Value_str);
end;


> Stanislav ©   (28.07.06 15:08) [7]
>
> Да тип Word

Тип Word не может хранить отрицательные числа.


DprYg   (2006-07-28 15:11:00) [17]

Тип Word не может хранить отрицательные числа. SmallInt(-32768 32767)


Stanislav   (2006-07-28 15:08:00) [18]

Да тип Word


Сергей М.   (2006-07-28 15:07:00) [19]


> какой мне надо использовать тип переменной, чтобы хранить
> число в 2 байта


Любой, размер которой не меньше 2-х байт.
Но лучше почитать букварь.


Mouserx   (2006-07-28 15:07:00) [20]

Stanislav ©   (28.07.06 15:05) [3]
эт я вкурсе, но не писать же в коде, что если старший битик единица, то использовать формулу типа твоей. Может есть попроще способы?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо