public bool initFromData(ByteReader versionReader) { WrapperReader reader = new WrapperReader(versionReader); uint red = 0; reader.align(4); reader.mark(); byte[] buffer = new byte[6]; uint ret = reader.read(buffer,0,6); if (ret == 0xFFFFffff || ret < 6) return false; header = new Header(buffer); red += ret; red += reader.readString(out key); red += (uint)reader.align(4); if (header.wValueLength != 0) { if (header.wType == 0) { values = new Data(null, (uint)header.wValueLength); red += reader.readData(out values, (uint)header.wValueLength); } else if (header.wType == 1) { values = new Data(null, (uint)header.wValueLength << 1); //buffer = new byte[header.wValueLength << 1]; //red += reader.read(buffer, 0, (ulong)header.wValueLength << 1); //values = new Data(buffer, (uint)header.wValueLength << 1); red += reader.readData(out values, (uint)header.wValueLength << 1); } else throw new ResourceException(); } if (header.wLength > red) { buffer = new byte[header.wLength - red]; reader.read(buffer, 0, header.wLength - red); rest = new Data(buffer, header.wLength - red); } reader.reset(); buffer = new byte[header.wLength]; reader.read(buffer, 0, header.wLength); allData = new Data(buffer, header.wLength); //dump(); if (rest != null && rest.size() != 0) { bool bContinue = false; DataReader childReader = new DataReader(rest); do { VersionInfo pNew = new VersionInfo(); bContinue = pNew.initFromData(childReader); //pNew->dump(); if(bContinue) children.Add(pNew); } while (bContinue); } return true; }
public String[] text() { String tell = "" ; if (header.wType == 1 && values != null) { DataReader reader = new DataReader(values); WrapperReader helper = new WrapperReader(reader); helper.readString(out tell); } else if(header.wType == 0) { ArrayList p = values.toHex(); String[] ar = new String[p.Count]; int i = 0; foreach(String x in p) { ar[i++] = x; } return ar; } return new String[] { key + " : " + tell, "empty" }; }