![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с получением правильного числа при конвертации.
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]
эт я вкурсе, но не писать же в коде, что если старший битик единица, то использовать формулу типа твоей. Может есть попроще способы?