Что нового

Перекодировка типа данных

xamd

AION bot developer
Сообщения
66
Репутация
24
Нужно из hex перевести значение во float.
Как?
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Таки зная алгоритмы конвертации можно написать свою UDFку я думаю
 
Автор
X

xamd

AION bot developer
Сообщения
66
Репутация
24
А нет просто стандартной функции, о которой я не знаю? :smile:
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Вроде нет, таки вроде я такие в глаза не видывал, разве что не включенная в стандартную библиотеку UDF созданная фанатами и что-то я сомневаюсь что любой HEX конвертируется в лонг, в лонге если мне память не изменяет как и цифры так же и текст хранится закодированный:smile: :smile:
 
Автор
X

xamd

AION bot developer
Сообщения
66
Репутация
24
Я из памяти вытаскиваю некоторое значение, которое является само по себе float данным. Я могу посмотреть его либо как integer, либо как hex (
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
ну дак в чем проблема тогда? о_О
Смотри в интегер и будет тебе счастье, тебе же не надо писать это значение обратно в 4-х байтный float
 
Автор
X

xamd

AION bot developer
Сообщения
66
Репутация
24
проблема в том, что у меня цифр 16 в этом integer, а надо цифры 3-4 + 1 значение после точки )
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
xamd
в integer нет значения после точки.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Код:
$iInt = 1082392576

$tInt = DllStructCreate('uint')
$tFloat = DllStructCreate('float', DllStructGetPtr($tInt))
DllStructSetData($tInt, 1, $iInt)

ConsoleWrite(DllStructGetData($tFloat, 1) & @CR)
 
Автор
X

xamd

AION bot developer
Сообщения
66
Репутация
24
Я просто объяснял зачем мне нужен float. Я знаю, что в integer целый тип )

Может быть тема не имеет смысла, ибо скорее всего у меня неверные стартовые параметры
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Код:
$Var_Origin 				= "0xFFFFFF"
$Var_Float 					= StringFormat("%.0f", $Var_Origin)
$Var_HexDec 				= StringFormat("0x%X", $Var_Float)

ConsoleWrite("$Var_Origin	= " & $Var_Origin & @LF)
ConsoleWrite("$Var_Float	= " & $Var_Float & @LF)
ConsoleWrite("$Var_HexDec	= " & $Var_HexDec & @LF)



Добавлено:
Сообщение автоматически объединено:

Yashied
Кстати, можно с этого функцию сделать:

Код:
$iFloat = _DataTypeConvert(12345, "int", "float")
ConsoleWrite($iFloat & @LF)

$iInt = _DataTypeConvert($iFloat, "float", "int")
ConsoleWrite($iInt & @LF)

Func _DataTypeConvert($sData, $sFromType, $sToType)
	$tFromStruct = DllStructCreate($sFromType)
	$tToStruct = DllStructCreate($sToType, DllStructGetPtr($tFromStruct))
	DllStructSetData($tFromStruct, 1, $sData)
	
	Return DllStructGetData($tToStruct, 1)
EndFunc
 

amel27

Продвинутый
Сообщения
146
Репутация
55
xamd сказал(а):
Я просто объяснял зачем мне нужен float. Я знаю, что в integer целый тип )
тогда просто создай структуру по нужному адресу и прочитай данные:

Код:
$tFloat = DllStructCreate('float', $iMemoryAddress)
$iFloat = DllStructGetData($tFloat, 1)


xamd сказал(а):
Может быть тема не имеет смысла, ибо скорее всего у меня неверные стартовые параметры

Float тоже бывает разный: http://ru.wikipedia.org/wiki/IEEE_754-2008
 
Верх