Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.09.10;
Скачать: [xml.tar.bz2];

Вниз

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

 
Mouserx   (2006-07-28 14:57) [0]

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


 
Сергей М. ©   (2006-07-28 15:03) [1]


> Если представить 2-мя байтами в HEX виде, то будет FFA6


А если чеверкой байтов, то FFFFFFA6.
При этом обратный перевод в Integer никаких проблем не вызовет.


 
Reindeer Moss Eater ©   (2006-07-28 15:04) [2]

Имееться число, например -90. Если представить 2-мя байтами в HEX виде, то будет FFA6.

Это word

то при переводе в переменную типа integer

А это четыре байта, а не два.

Вот и вся причина


 
Stanislav ©   (2006-07-28 15:05) [3]

65446-65536  Будет -90


 
Mouserx   (2006-07-28 15:06) [4]

А какой мне надо использовать тип переменной, чтобы хранить число в 2 байта, которое может быть и отрицательным? ... и как правильно сконвертировать из строки в эту переменную?


 
Mouserx   (2006-07-28 15:07) [5]

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


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


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


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


 
Stanislav ©   (2006-07-28 15:08) [7]

Да тип Word


 
DprYg ©   (2006-07-28 15:11) [8]

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


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


> Любой, размер которой не меньше 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 не может хранить отрицательные числа.


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


> 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


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


> 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;
>


 
Stanislav ©   (2006-07-28 15:18) [12]

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


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

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


 
Reindeer Moss Eater ©   (2006-07-28 15:22) [14]

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


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


> Mouserx   (28.07.06 15:20) [13]


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


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


 
sniknik ©   (2006-07-28 15:49) [16]

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

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


 
DprYg ©   (2006-07-28 15:50) [17]


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


 
sniknik ©   (2006-07-28 15:53) [18]

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


 
Ketmar ©   (2006-07-28 16:14) [19]

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


 
Mouserx   (2006-07-28 17:17) [20]


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

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

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


 
Ketmar ©   (2006-07-28 18:06) [21]

я про [11].


 
palva ©   (2006-07-29 23:24) [22]

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

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


Или даже так:

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


 
GrayFace ©   (2006-07-30 05:45) [23]

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


 
Anatoly Podgoretsky ©   (2006-07-30 15:46) [24]

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



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2006.09.10;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.069 c
1-1153733070
Mintos
2006-07-24 13:24
2006.09.10
OleContainer и Exel


1-1153921160
RedLeo
2006-07-26 17:39
2006.09.10
Анализ строк в TStringList


15-1155735870
StriderMan
2006-08-16 17:44
2006.09.10
Windows Vista


1-1153902373
Yozch1
2006-07-26 12:26
2006.09.10
Пропали вкладки палитры компонентов


2-1155900973
Ega23
2006-08-18 15:36
2006.09.10
PVariant как параметр.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский