public override void WriteASCIIString(string value, int length, ASCIIFormat format = ASCIIFormat.Raw)
        {
            Assert(length >= 0);
            byte[] bytes;
            switch (format)
            {
            case ASCIIFormat.Raw: bytes = Encoding.ASCII.GetBytes(value); Array.Resize(ref bytes, length); Write(bytes, 0, bytes.Length); break;

            case ASCIIFormat.PossiblyNullTerminated: bytes = Encoding.ASCII.GetBytes(value); Array.Resize(ref bytes, length); Write(bytes, 0, bytes.Length); break;

            //case ASCIIFormat.ZeroPadded:
            //    var zeroIdx = bytes.Length - 1; for (; zeroIdx >= 0 && bytes[zeroIdx] == 0; zeroIdx--) { }
            //    return Encoding.ASCII.GetString(bytes, 0, zeroIdx + 1);
            default: throw new ArgumentOutOfRangeException(nameof(format), format.ToString());
            }
        }
        public string ReadASCIIString(int length, ASCIIFormat format = ASCIIFormat.Raw)
        {
            Debug.Assert(length >= 0);
            var bytes = r.ReadBytes(length);

            switch (format)
            {
            case ASCIIFormat.Raw: return(Encoding.ASCII.GetString(bytes));

            case ASCIIFormat.PossiblyNullTerminated:
                var bytesIdx = bytes.Last() != 0 ? bytes.Length : bytes.Length - 1;
                return(Encoding.ASCII.GetString(bytes, 0, bytesIdx));

            case ASCIIFormat.ZeroPadded:
                var zeroIdx = bytes.Length - 1; for (; zeroIdx >= 0 && bytes[zeroIdx] == 0; zeroIdx--)
                {
                }
                return(Encoding.ASCII.GetString(bytes, 0, zeroIdx + 1));

            default: throw new ArgumentOutOfRangeException("format", format.ToString());
            }
        }
        //public abstract long Position { get; }

        public abstract void WriteASCIIString(string value, int length, ASCIIFormat format = ASCIIFormat.Raw);
 public abstract string ReadASCIIString(int length, ASCIIFormat format = ASCIIFormat.Raw);
Exemple #5
0
 public static FILEField ReadFILE(this BinaryFileReader r, int length, ASCIIFormat format = ASCIIFormat.PossiblyNullTerminated) => new FILEField
 {
     Value = r.ReadASCIIString(length, format)
 };
 public static FILEField ReadFILE(this UnityBinaryReader r, int length, ASCIIFormat format = ASCIIFormat.PossiblyNullTerminated)
 {
     return(new FILEField {
         Value = r.ReadASCIIString(length, format)
     });
 }