Что нового

[Данные,Строки]Старшее слово <=> младшее слово

MnM

Post-Hardcore
Сообщения
679
Репутация
90
Здравствуйте форумчане=), меня уж не так давно и не так недавно терзает вопрос таковой:
Есть wParam и lParam в основном встречаются в WindowsMessage, как известно в некоторых функциях эти слова передаются в таких данных что их можно "разделить" на младшее(умножить на 0xFFFF) и старшее(сдвинуть биты на 16 вправо) слово.

Собственно вопрос: а можно ли как нибудь мои данные которые я передам, "слить" их так что бы их потом можно было обратно "разделить"?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
MnM,
Код:
_WinAPI_MakeLong()
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
MnM [?]
а можно ли как нибудь мои данные которые я передам, "слить" их так что бы их потом можно было обратно "разделить"?
Код:
Local $aByte[5] = [4, Random(0, 255, 1), Random(0, 255, 1), Random(0, 255, 1), Random(0, 255, 1)], $tByte = DllStructCreate('byte[4]'), _
		$tDword = DllStructCreate('dword', DllStructGetPtr($tByte)), $iDword

For $i = 1 To $aByte[0]
	ConsoleWrite($i & @TAB & $aByte[$i] & @LF)
	DllStructSetData($tByte, 1, $aByte[$i], $i)
Next
ConsoleWrite('-----' & @LF)
$iDword = DllStructGetData($tDword, 1)
ConsoleWrite('$iDword: ' & $iDword & @LF)
$aByte = 0
$tByte = 0
$tDword = 0
ConsoleWrite('-----' & @LF)
Local $tDword_1 = DllStructCreate('dword'), $aByte_1[5] = [4], $tByte_1 = DllStructCreate('byte[4]', DllStructGetPtr($tDword_1))

DllStructSetData($tDword_1, 1, $iDword)
For $i = 1 To $aByte_1[0]
	$aByte_1[$i] = DllStructGetData($tByte_1, 1, $i)
	ConsoleWrite($i & @TAB & $aByte_1[$i] & @LF)
Next
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Для этого вполне достаточно Bit... функций.
 
Автор
MnM

MnM

Post-Hardcore
Сообщения
679
Репутация
90
madmasles
Эта функция может преобразовывать только числа? Или все же как то умеет и со строками работать
Код:
Local $t[2]=["ads",3]
;~ Local $bw=_WinAPI_MakeLong($t[0],$t[1])
Local $bw=BitOR(BitShift($t[1],-16),BitAND($t[0],0xFFFF))
MsgBox(0,'',$bW&@TAB&BitShift($bW,16)&" - "&BitAND($bW,0xFFFF))

Упорно не работает со строкой, может с бинарными данными но при обратном преобразовании получается либо число, либо ничего
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
Строки всё же представлены в памяти как числа, поэтому чёткую грань иногда можно не проводить. Это просто информация определяемая размером в байтах. И мне кажется это просто два числа рядом воспринимаемое как одно число, которое представлено как одно длинное, а на самом деле состоит из двух ячеек.
 
Автор
MnM

MnM

Post-Hardcore
Сообщения
679
Репутация
90
AZJIO
Ну немного проясняется, значит такое сложение только для чисел и бинарных данных которые не являются строкой?
 
Верх