private BlenderFileBlockToken ReadFileBlock(FileStream fs, BlenderFileHeaderToken fileHeader) { /* code char[4] File-block identifier 0 4 size integer Total length of the data after the file-block-header 4 4 old memory address void* Memory address the structure was located when written to disk 8 pointer-size (4/8) SDNA index integer Index of the SDNA structure 8+pointer-size 4 count integer Number of structure located in this file-block 12+pointer-size 4 */ var identifier = new byte[4]; fs.Read(identifier, 0, identifier.Length); var id = Encoding.ASCII.GetString(identifier); var dataLength = ReadInt(fs, fileHeader.Endianness); var memoryAddress = fileHeader.PointerSize == 4 ? ReadInt(fs, fileHeader.Endianness) : ReadLong(fs, fileHeader.Endianness); var sdnaIndex = ReadInt(fs, fileHeader.Endianness); var count = ReadInt(fs, fileHeader.Endianness); var data = new byte[dataLength]; fs.Read(data, 0, data.Length); var md5 = MD5.Create(); var hash = md5.ComputeHash(data, 0, data.Length); return new BlenderFileBlockToken(id, dataLength, memoryAddress, sdnaIndex, count, BitConverter.ToString(hash)); }
private BlenderFileBlockToken ReadFileBlock(FileStream fs, BlenderFileHeaderToken fileHeader) { /* * code char[4] File-block identifier 0 4 * size integer Total length of the data after the file-block-header 4 4 * old memory address void* Memory address the structure was located when written to disk 8 pointer-size (4/8) * SDNA index integer Index of the SDNA structure 8+pointer-size 4 * count integer Number of structure located in this file-block 12+pointer-size 4 * */ var identifier = new byte[4]; fs.Read(identifier, 0, identifier.Length); var id = Encoding.ASCII.GetString(identifier); var dataLength = ReadInt(fs, fileHeader.Endianness); var memoryAddress = fileHeader.PointerSize == 4 ? ReadInt(fs, fileHeader.Endianness) : ReadLong(fs, fileHeader.Endianness); var sdnaIndex = ReadInt(fs, fileHeader.Endianness); var count = ReadInt(fs, fileHeader.Endianness); var data = new byte[dataLength]; fs.Read(data, 0, data.Length); var md5 = MD5.Create(); var hash = md5.ComputeHash(data, 0, data.Length); return(new BlenderFileBlockToken(id, dataLength, memoryAddress, sdnaIndex, count, BitConverter.ToString(hash))); }