Beispiel #1
0
        public void DetectBOM()
        {
            BOMDetector bd;

            byte[] bts;

            bts = new byte[] { 0xFF, 0xFE, 0x00, 0x00, };
            bd  = new BOMDetector();
        }
Beispiel #2
0
        static void Main(string[] args)
        {
            Parser.Default.ParseArguments <Options>(args)
            .WithParsed(o =>
            {
                if (!File.Exists(o.InputPath))
                {
                    Console.WriteLine("No such file");
                    return;
                }

                byte[] buf;
                using (MemoryStream data = new MemoryStream())
                {
                    using (Stream file = File.OpenRead(o.InputPath))
                    {
                        file.CopyTo(data);
                        buf = data.ToArray();

                        if (o.Range != null)
                        {
                            string rangeStr = o.Range;
                            Regex regex     = new Regex(@"^(\d+)-(\d+)");
                            if (!regex.IsMatch(rangeStr))
                            {
                                Console.WriteLine("Invalid range text format. Check the \"help\" text.");
                                return;
                            }
                            Match match = regex.Match(rangeStr);
                            var groups  = match.Groups;

                            if (groups.Count != 3)
                            {
                                throw new InvalidOperationException($"Regex math count is not 3. but {groups.Count}");
                            }

                            int start = Convert.ToInt32(groups[1].Value);
                            int end   = Convert.ToInt32(groups[2].Value);

                            if (end < start)
                            {
                                Console.WriteLine("The end range value must be bigger than the start range value");
                                return;
                            }

                            buf = buf.ToList().GetRange(start, end - start + 1).ToArray();
                        }
                    }
                }

                if (o.Summary)
                {
                    int pad    = 10;
                    int length = buf.Length;
                    BOMs bom   = BOMDetector.DetectBOM(buf);
                    Console.WriteLine($"{nameof(length).PadRight(pad)} : {length}");
                    Console.WriteLine($"{nameof(bom).PadRight(pad)} : {bom}");
                }

                int baseBit = int.MinValue;
                Func <string, string> converter = null;
                if (o.Binary)
                {
                    baseBit   = 2;
                    converter = (s) => (s.PadLeft(8, '0'));
                }
                else if (o.Decimal)
                {
                    baseBit   = 10;
                    converter = (s) => (s.PadLeft(3, '0'));
                }
                else if (o.Hexadecimal)
                {
                    baseBit   = 16;
                    converter = (s) => ("0x" + s.PadLeft(2, '0'));
                }
                else if (o.Ascii)
                {
                    string contents = Encoding.ASCII.GetString(buf);
                    Console.WriteLine(contents);
                    return;
                }
                else if (o.UTF8)
                {
                    string contents = Encoding.UTF8.GetString(buf);
                    Console.WriteLine(contents);
                    return;
                }
                else if (o.INT)
                {
                    if (buf.Length % 4 != 0)
                    {
                        Console.WriteLine(" if you want to use integer data representation, the length of bytes must be multiples of 4.");
                        return;
                    }

                    int[] vals = null;
                    if (o.endian == "big")
                    {
                        vals = ByteToNumber.ToInt(buf, Endian.Big);
                    }
                    else if (o.endian == "little")
                    {
                        vals = ByteToNumber.ToInt(buf, Endian.Little);
                    }
                    else
                    {
                        Console.WriteLine("endian option must be \"big\" or \"little\"");
                        return;
                    }

                    foreach (var val in vals)
                    {
                        Console.Write(val);
                        Console.Write(" ");
                    }
                    Console.WriteLine();

                    return;
                }
                else if (o.DOUBLE)
                {
                    if (buf.Length % 8 != 0)
                    {
                        Console.WriteLine(" if you want to use integer data representation, the length of bytes must be multiples of 8.");
                        return;
                    }

                    double[] vals = null;
                    if (o.endian == "big")
                    {
                        vals = ByteToNumber.ToDouble(buf, Endian.Big);
                    }
                    else if (o.endian == "little")
                    {
                        vals = ByteToNumber.ToDouble(buf, Endian.Little);
                    }
                    else
                    {
                        Console.WriteLine("endian option must be \"big\" or \"little\"");
                        return;
                    }

                    foreach (var val in vals)
                    {
                        Console.Write(val);
                        Console.Write(" ");
                    }
                    Console.WriteLine();
                    return;
                }
                else
                {
                    baseBit   = 16;
                    converter = (s) => ("0x" + s.PadLeft(2, '0'));
                }

                foreach (var b in buf)
                {
                    var val = converter(Convert.ToString(b, baseBit));
                    Console.Write(val + " ");
                }
                Console.WriteLine();
            });
        }