AS3 でこの種の情報を使用してフォーマットを解凍することは可能ですか? C++ を使用して同様の形式を解凍する人を見てきましたが、私は AS3 に精通しているので、ActionScript の知識を使用して同じことができるかどうか知りたいです。
明らかかもしれませんが、私は ByteArrays をあまり扱ったことがなく、バイトの操作にかなり慣れていません。でも学ぶ気はあります。
AS3 でこの種の情報を使用してフォーマットを解凍することは可能ですか? C++ を使用して同様の形式を解凍する人を見てきましたが、私は AS3 に精通しているので、ActionScript の知識を使用して同じことができるかどうか知りたいです。
明らかかもしれませんが、私は ByteArrays をあまり扱ったことがなく、バイトの操作にかなり慣れていません。でも学ぶ気はあります。
メソッドを使用すると、これは非常に簡単IDataInput
です。FileStream または Socket から直接読み取ることも、ByteArray を処理することもできます。Adobe にはZIP ファイルの例があり、これは基本的にユースケースと同じです。構造体の各メンバーが占めるバイト数を知る必要があります (つまり、DWORD は通常 32 ビット符号なしです)。
あなたの例:
struct BLBHeader class Header
{ {
char szID[4]; public var szID:ByteArray;
BYTE bID; public var bID:uint;
BYTE bUnknown; public var bUnknwon:uint;
WORD wDataSize; public var wDataSize:uint;
DWORD dwFileSize; public var dwFileSize:uint;
DWORD dwNumber; public var dwNumber:uint;
}; }
function readHeader(input:IDataInput):Header {
var header:Header = new Header();
// ByteArrays have to be pre-allocated
header.szID = new ByteArray();
input.readBytes(header.szID, 0, 4);
// primitives just get read in
header.bID = input.readUnsignedByte(); // 8 bits
header.bUnknown = input.readUnsignedByte();
header.wDataSize = input.readUnsignedShort(); // 16 bits
DWORD dwFileSize = input.readUnsignedInt(); // 32 bits
DWORD dwNumber = input.readUnsignedInt();
};
代わりに szID を文字列にしたい場合は、次を使用できます
header.szID = input.readMultiByte(4, 'us-ascii'); // one byte per char
使用するには:
var header:Header = readHeader(input);
var fileIDs:Array = [];
for (var i:int = 0; i < header.dwNumber; ++i) {
fileIDs.push( readFileID(input) );
}
... // continue with readDirEntry(input), readDataSection(input), ...