如何解决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 );
这将给出0
或64
。如果小于64,则为0
;如果等于或大于64,则为64
。
这可能是设置Boolean
的快捷方式,例如:
var _loc4_ :Boolean;
if (_loc3_ >= 64) { _loc4_ = true}
else { _loc4_ = false; }
(3)
_loc2_ = _loc3_ & 63;
将_loc2_
设置为0
或63
的整数。
(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 )
...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。