コード例 #1
0
        /// <summary>
        /// Reverses the endianness of a data file on LE machines so the underlying stream can be copied from as is
        /// </summary>
        /// <param name="file">The file to swap endianness for</param>
        // todo: refactor and move into ExceLDataFile
        protected void ProcessDataEndianness(ExcelDataFile file)
        {
            if (!BitConverter.IsLittleEndian)
            {
                return;
            }

            if (file.SwappedEndianness)
            {
                return;
            }


            var stream = new MemoryStream(file.Data);
            var writer = new BinaryWriter(stream);
            var reader = new BinaryReader(stream);

            foreach (var row in file.RowData.Values)
            {
                var offset = row.Offset;

                stream.Position = offset;

                if (Variant == ExcelVariant.Subrows)
                {
                    var rowHdr = reader.ReadStructure <ExcelDataRowHeader>();
                    rowHdr.RowCount = BinaryPrimitives.ReverseEndianness(rowHdr.RowCount);
                    rowHdr.DataSize = BinaryPrimitives.ReverseEndianness(rowHdr.DataSize);

                    for (var i = 0; i < rowHdr.RowCount; i++)
                    {
                        var subRowOffset = row.Offset + 6 + (i * Header.DataOffset + 2 * (i + 1));

                        stream.Position = subRowOffset;

                        ProcessDataRow(subRowOffset, stream, writer, reader);
                    }
                }
                else
                {
                    // skip header
                    ProcessDataRow(offset + 6, stream, writer, reader);
                }
            }

            file.SwappedEndianness = true;
        }
コード例 #2
0
ファイル: RowParser.cs プロジェクト: NotAdam/Lumina
 public RowParser(ExcelSheetImpl sheet, ExcelDataFile dataFile)
 {
     _sheet    = sheet;
     _dataFile = dataFile;
 }
コード例 #3
0
ファイル: RowParser.cs プロジェクト: NotAdam/Lumina
 public RowParser(ExcelSheetImpl sheet, ExcelDataFile dataFile, uint row, uint subRow)
     : this(sheet, dataFile, row)
 {
     SeekToRow(row, subRow);
 }
コード例 #4
0
 public RowParser(ExcelSheetImpl sheet, ExcelDataFile dataFile, int row)
     : this(sheet, dataFile)
 {
     SeekToRow(row);
 }