字节数组的AS3大小的数据类型

时间:2016-01-15 17:02:36

标签: arrays actionscript-3 bytearray

我有一个字节数组,我想辐射前10个字节并存储为字符串,接下来的138个字节是垃圾,然后接下来的4个字节应该是一个数字。我有一些代码,但它没有像我期望的那样工作,我得到了一个我没想到的数字。

--> "Run" 
--> "Edit Configurations" 
--> [+] The little plus in the top left corner 
--> "Gradle"

或者如果我读了一个int:trace(loader.data.readInt());我仍然得到错误的价值。

抱歉,我对bytearrays不太好。

as3是int 4x字节还是短?

在哪里可以找到数据类型的字节大小?感谢。

1 个答案:

答案 0 :(得分:0)

首先请务必查看此信息以供参考: AS3 ByteArray API

另请注意,在AS3中,读取字节值会自动移动指针的位置。它必须跨过字节槽才能知道它们的值,所以要读取一个整数,它将从运行之前的任何位置向前移动4个字节:myInt = myBytes.readUnsignedInt();

仅使用readByteswriteBytes复制ByteArrays之间的字节。
要获取实际字节值,请使用:(引自 this Answer

  

要检查任何字节(其值),请使用以下方法更新一些字节   变量int类型:

     
      
  • 读取[单字节值]:使用my_Integer = source_BA.readByte();
  •   
  • 读取[双字节值]:使用my_Integer = source_BA.readUnsignedShort();
  •   
  • 读取[四字节值]:使用my_Integer = source_BA.readUnsignedInt();
  •   
  • [八字节值]的变量Number:使用my_Number = source_BA.readDouble();
  •   


无论如何,请在您的函数中尝试以下代码...

function loaderComplete(e:Event):void
{
    byteData = new ByteArray();
    store = new ByteArray();

    //# set both vars to same values at once by chaining
    byteData.position = store.position = 0; 
    byteData.endian = store.endian = Endian.LITTLE_ENDIAN;

    //# put bytes into byteData
    byteData = URLLoader(e.target).data as ByteArray;
    //byteData = ByteArray(loader.data); //shorter but untested

    //# 1) Get 10 character string
    name_string = byteData.readUTFBytes( 10 );

    //# 2) Skip the +138 bytes
    byteData.position = 9; //if paranoid just manually set pointer to pos 9 (for 10th byte)
    byteData.position += 138; //increment forward by Plus 138 bytes from current pos 

    //# 3)  Extract (4 byte) Integer from pointer offset 148
    var my_Number : int = byteData.readUnsignedInt(); //moves pointer Plus 4 bytes after reading

    trace( "my_Number from bytes is : " + my_Number );
}