[英]CompressedInt Write?
public static function Read(param1:IDataInput) : int
{
var _loc2_:* = 0;
var _loc3_:int = param1.readUnsignedByte();
var _loc4_:* = (_loc3_ & 64) != 0;
var _loc5_:int = 6;
_loc2_ = _loc3_ & 63;
while(_loc3_ & 128)
{
_loc3_ = param1.readUnsignedByte();
_loc2_ = _loc2_ | (_loc3_ & 127) << _loc5_;
_loc5_ = _loc5_ + 7;
}
if(_loc4_)
{
_loc2_ = int(-_loc2_);
}
return _loc2_;
}
有人可以幫我寫東西嗎? 即將在基於 as3 的服務器中使用,但只有讀取的內容
正如@Organis 正確所說的那樣“不知道如何組成一個還原算法。”
下面列出了唯一明顯的事情,因此您必須進行大量測試才能使其正確(逆向工程就是這樣工作的,可能需要幾天或幾周的時間)。 祝你好運。
評估:
(1)
public static function Read(param1:IDataInput) : int
看起來它需要一個包含兩個條目的(字節)數組。 我懷疑你應該寫一個 Short (以十六進制格式),但只寫兩個單獨的十進制值會更容易(因為Short
是一個分布在兩個字節上的值)。
public static function Write(val1 :int, val2 :int, targetBA :ByteArray) : void
{
targetBA.length = 2;
targetBA.position = 0;
targetBA.writeByte( val1 );
targetBA.writeByte( val2 );
//# target ByteArray can now be "Read" by the other function as "param1"
}
至於Read
方面...
由於 function 返回一個值來更新一些 var,你應該使用如下:
myResult = Read( targetBA );
myResult
獲取函數返回的_loc2_
結果的位置。
(2)
var _loc4_:* = ( (_loc3_ & 64) != 0 );
這將給出0
或64
。 如果小於 64,則為0
,否則如果等於或更高,則為64
。 這可能是設置Boolean
的快捷方式,例如:
var _loc4_ :Boolean;
if (_loc3_ >= 64) { _loc4_ = true}
else { _loc4_ = false; }
(3)
_loc2_ = _loc3_ & 63;
其中_loc2_
設置為0
或63
的 integer。
(4)
while(_loc3_ & 128)
我不知道這是為了達到什么目的。 (_loc3_ & 128)
是0
或128
。 這個While(0)
或While(128)
循環將永遠運行並且沒有任何停止break;
在最后。
(5)
_loc2_ = _loc2_ | (_loc3_ & 127) << _loc5_;
這將使用兩個值更新_loc2_
。 當前loc2值與修改后的loc3值相結合。
(6)
if(_loc4_)
可能意味着if( _loc4_ == true )
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.