Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > RichTextBox и Hex


Автор: alhimik 28.7.2007, 19:54
Есть RichTextBox. Нужно загрузить бинарный файл и отобразить его в шестнадцатеричном формате.
Сначала была проблема как загурзить такой файл. Вот решение:
Код

   richTextBox1.LoadFile("c:\\file.exe", RichTextBoxStreamType.UnicodePlainText);

Но как представить его в удобном hex-формате?
Есть ли элегантное решение данного задания?
Можно естественно сделать FileStream и в цикле загружать содержимое файла побайтно, конвертить и записывать в простом текстовом формате как hex-числа в RichTextBox. Но это какое-то деревянное решение  smile 

Автор: alhimik 29.7.2007, 16:11
Деревянное решение:
Код

private string keyToHex(string keyPath)
        {
            byte[] key;
            using (FileStream fs = new FileStream(keyPath, FileMode.Open, FileAccess.Read))
            {
                key = new byte[fs.Length];
                fs.Read(key, 0, (int)fs.Length);
            }
            
            string st = "";
            for (int x = 0; x < key.Length; x++)
                st = st + String.Format("{0:x02} ", key[x]);
            return(st.ToUpper());
        }


Элегантное решение: никогда не подумал бы что метод BitConverter.ToString()  "Converts the numeric value of each element of a specified array of bytes to its equivalent hexadecimal string representation"!!!
Код

private string keyToHex(string keyPath)
        {
            byte[] key;
            using (FileStream fs = new FileStream(keyPath, FileMode.Open, FileAccess.Read))
            {
                key = new byte[fs.Length];
                fs.Read(key, 0, (int)fs.Length);
            }
            
            return (BitConverter.ToString(key).Replace('-',' '));
        }

Вот. Как говорится - сам себе волшебник  smile 

Автор: okaton 20.9.2007, 12:49
А если в файле числа предствавляются в 2 байтах например 2c 01 т.е. 300 как его прочитать, ведь побайтно будет 44 1, а нужно 300.
Есть ли способ такого чтения?

Автор: okaton 20.9.2007, 13:43
Отвечаю на свой вопрос

Код

                Int16[] shorts;
                using (BinaryReader br = new BinaryReader(File.OpenRead("c:\\csc.txt")))
                {
                    List<Int16> res = new List<short>();
                    for (Int32 i = 0; br.BaseStream.Position < br.BaseStream.Length; i++)
                        res.Add(br.ReadInt16());
                    shorts = res.ToArray();
                }

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)