CompressedInt写?

问题描述

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方面...

由于该函数返回一个值以更新某些var,因此您应将其用作:

myResult = Read( targetBA ); 

myResult在哪里获得函数的返回_loc2_结果。

(2)

var _loc4_:* = ( (_loc3_ & 64) != 0 );

这将给出064。如果小于64,则为0;如果等于或大于64,则为64。 这可能是设置Boolean的快捷方式,例如:

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

(3)

_loc2_ = _loc3_ & 63;

_loc2_设置为063的整数。

(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 ) ...

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...