我有一个字节数组,我想辐射前10个字节并存储为字符串,接下来的138个字节是垃圾,然后接下来的4个字节应该是一个数字。我有一些代码,但它没有像我期望的那样工作,我得到了一个我没想到的数字。
--> "Run"
--> "Edit Configurations"
--> [+] The little plus in the top left corner
--> "Gradle"
或者如果我读了一个int:trace(loader.data.readInt());我仍然得到错误的价值。
抱歉,我对bytearrays不太好。as3是int 4x字节还是短?
在哪里可以找到数据类型的字节大小?感谢。
答案 0 :(得分:0)
首先请务必查看此信息以供参考: AS3 ByteArray API
另请注意,在AS3中,读取字节值会自动移动指针的位置。它必须跨过字节槽才能知道它们的值,所以要读取一个整数,它将从运行之前的任何位置向前移动4个字节:myInt = myBytes.readUnsignedInt();
仅使用readBytes
和writeBytes
复制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 );
}