簡體   English   中英

CompressedInt 寫入?

[英]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 );

這將給出064 如果小於 64,則為0 ,否則如果等於或更高,則為64 這可能是設置Boolean的快捷方式,例如:

var _loc4_ :Boolean;
if (_loc3_ >= 64) { _loc4_ = true}
else { _loc4_ = false; }

(3)

_loc2_ = _loc3_ & 63;

其中_loc2_設置為063的 integer。

(4)

while(_loc3_ & 128)

我不知道這是為了達到什么目的。 (_loc3_ & 128)0128 這個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM