Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
165 / 137 / 23
Регистрация: 02.01.2011
Сообщений: 913
1

16-ричныи код

10.08.2011, 16:52. Показов 1993. Ответов 17
Метки нет (Все метки)

Есть поток байтов. Собираю их в массив. Надо вывести их в читаемом виде на форму. Если вывожу их в виде строки
(
C#
1
2
3
4
5
6
7
        string stroka;
        int bytes = com.BytesToRead;
        buffer = new byte[bytes];
        com.Read(buffer, 0, bytes);
        var m = System.Text.Encoding.ASCII.GetString(buffer);
       stroka = m;
      TextBox1.Text=stroka;
), то нечитаемые символы изображаются всякои бякой, а иногда затираются предыдущие символы. Хочу вывести их в 16-м коде, чтобы можно было потом определить кто есть кто. Как сделать - не знаю. Что посоветуете? Спасибо!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.08.2011, 16:52
Ответы с готовыми решениями:

Переделать код содержащий в себе цикл с параметром, в код с циклом с ПРЕДУСЛОВИЕМ (while do)
Program Sum_Del; Var N, I, Sum_Max, Sum, K, Ch : Integer; Begin Write('Введите число N: '); ...

Нашел код в интернете. Можно ли этот код из С++ преобразовать в язык программирования C#?
Нашел код в интернете можно ли этот код из С++ преобразовать в язык программирования C#. Язык...

Перевести ассемблерный код TASM в программный код для архитектуры ARM
Необходимо программный код перевести в программный код языка ассемблер для архитектуры ARM,...

Надо написать код программы (код есть оформить в маткад не могу_
Видео файл меньше весит чем картинка :D Вот этот код If r1=X0 then g4(r1)=... Как его записать...

17
Злой няш
1949 / 1384 / 508
Регистрация: 05.04.2010
Сообщений: 2,627
10.08.2011, 17:39 2
Цитата Сообщение от iva_a Посмотреть сообщение
то нечитаемые символы изображаются всякои бякой, а иногда затираются предыдущие символы
Значит кодировка неверно указана, желательно писать Encoding.Default.

Вот Вам пример реализации:
Пример
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
using System;
using System.IO;
using System.Text;
 
namespace ConsoleApplicationTest
{
    class Program
    {
        static void Main(string[] args)
        {
            byte[] file = File.ReadAllBytes(@"D:\test.txt");
            foreach (byte value in file)
                Console.Write("{0:x} ", value);
        }
    }
}
1
165 / 137 / 23
Регистрация: 02.01.2011
Сообщений: 913
11.08.2011, 10:17  [ТС] 3
Blood-Angel,спасибо за ответ. Ваш пример работает, а вот изменить Ваш пример, чтобы он работал на форме у меня не получилось. Помогите починить, пожалуйста!
C#
1
2
3
4
5
 byte[] file = File.ReadAllBytes(@"D:\test.txt");
            foreach (byte value in file)
            var m = System.Text.Encoding.Default.GetString(value);//Здесь ошибка компиляции - Error    1   //The best overloaded method match for 'System.Text.Encoding.GetString(byte[])' has some invalid arguments
 
            textBox1.Text = m;
Добавлено через 23 минуты
Пробую так
C#
1
2
3
4
5
6
7
8
9
 private void TestForm_Load(object sender, EventArgs e)
        {
 
            byte[] file = File.ReadAllBytes(@"D:\test.txt");
            string m = System.Text.Encoding.Default.GetString(file); 
            textBox1.Text = String.Format("{0:x} ",m); 
               // Console.Write("{0:x} ", value);
            
        }
В "D:\test.txt" записала только пробел, код пробела - 20, если запускаю консольную аппликацию(Вашу) - 20 вижу, на форме -нет. Что не так?
0
554 / 508 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
11.08.2011, 10:24 4
у меня похожая проблема. в чем суть, я понимаю, но как решить - не знаю.
на форме можно отобразить только текст в юникоде, для этого нужно преобразовать текст в какой-то кодировке в этот юникод, указав кодировку, кодовую страницу и т.д.
я эту тему не увидел, поэтому свою открыл. может там кто-нибудь подскажет.
0
165 / 137 / 23
Регистрация: 02.01.2011
Сообщений: 913
11.08.2011, 10:31  [ТС] 5
novi4ok, если (когда!) разберетесь, мне тоже подскажите! Но решение должно быть!!!!!Пока мучаю все кодировки безрезультатно
0
554 / 508 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
11.08.2011, 10:34 6
Цитата Сообщение от iva_a Посмотреть сообщение
решение должно быть!!!!!
да 100%!
0
165 / 137 / 23
Регистрация: 02.01.2011
Сообщений: 913
11.08.2011, 10:40  [ТС] 7
Ага, осталось только найти решение!
0
554 / 508 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
11.08.2011, 10:49 8
держи!
Код
TextBox1.Text = System.Text.Encoding.GetEncoding(1251).GetString(buffer);
0
165 / 137 / 23
Регистрация: 02.01.2011
Сообщений: 913
11.08.2011, 11:03  [ТС] 9
Увы, не работает
0
554 / 508 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
11.08.2011, 11:11 10
Цитата Сообщение от iva_a Посмотреть сообщение
Увы, не работает
выведи эти байты в бинарный файл и посмотри чем-нибудь что там. скорее всего '\0'-'\x13' где-то в потоке

C#
1
2
3
4
5
using System.IO;
...
   using ( FileStream fs = new FileStream("test.dat", FileMode.Create, FileAccess.Write);
      _FileStream.Write(buffer, 0, buffer.Length);
   }
0
165 / 137 / 23
Регистрация: 02.01.2011
Сообщений: 913
11.08.2011, 11:15  [ТС] 11
В том-то и дело, что я не знаю, что будет в буффере(с модема), поэтому и хочу выводить в 16-ричном. Пока что просто в текстовом файле записала ("ручками") один (!!!) пробел, и хочу в TextBox получить код пробела 20. Не получаю
0
554 / 508 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
11.08.2011, 11:18 12
я дописал свое предыдущее сообщение. файл test.dat можешь потом в visual studio open with... открыть и посмотреть в шестнадцатеричном. или чем тебе привычнее. там будет весь твой поток.
еще вариант - поставь breakpoint, и посмотри что там в этом массиве за "символы".
0
165 / 137 / 23
Регистрация: 02.01.2011
Сообщений: 913
11.08.2011, 11:23  [ТС] 13
novi4ok,еше раз - пока в файле(имитация будушего потока с модема) только 1 символ - пробел. Хочу вывести в TextBox 16-ричный код пробела, т.е. 20. не получается ...
0
554 / 508 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
11.08.2011, 11:40 14
Цитата Сообщение от iva_a Посмотреть сообщение
novi4ok,еше раз - пока в файле(имитация будушего потока с модема) только 1 символ - пробел. Хочу вывести в TextBox 16-ричный код пробела, т.е. 20. не получается ...
всего-то! я не понял сразу чего тебе надо. это еще проще:

C#
1
TextBox1.Text = BitConverter.ToString(buffer);
1
165 / 137 / 23
Регистрация: 02.01.2011
Сообщений: 913
11.08.2011, 11:48  [ТС] 15
Ура! Уже сделала так!
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 private void TestForm_Load(object sender, EventArgs e)
        {
 
            byte[] file = File.ReadAllBytes(@"D:\test.txt");
            string m = System.Text.Encoding.Default.GetString(file);
 
            string s2 = ToHexString(file);
            textBox1.Text = s2;
        }
 
        public  string ToHexString(byte[] value)
        {
            StringBuilder hex = new StringBuilder(value.Length * 2);
            foreach (byte b in value) 
            {    
                hex.AppendFormat("{0:x2} ", b);
            }
            return hex.ToString(); 
 
        }
0
Злой няш
1949 / 1384 / 508
Регистрация: 05.04.2010
Сообщений: 2,627
11.08.2011, 12:32 16
C#
1
string m = System.Text.Encoding.Default.GetString(file);
Бессмысленное действие, так как Вы меняете кодировку на такую же.

Все куда проще, да~ и вообще незачем менять кодировку из-за того, что читаем файл по байту.
C#
1
2
3
4
5
            byte[] file = File.ReadAllBytes(@"D:\test.txt");
            StringBuilder result = new StringBuilder();
            foreach (byte value in file)
                result.AppendFormat("{0:x2} ", value);
            textBox1.Text = result.ToString();
P.S. Если прочитаете файл с одним пробелом в ANSI-кодировке, то получите свой пробел в виде 20, но если же прочитаете в Unicode, то на выходе будут два символа 0 и 20 (у меня еще пару символа в начало файла дополнительно добавляются из-за того, что это Unicode).
0
165 / 137 / 23
Регистрация: 02.01.2011
Сообщений: 913
11.08.2011, 13:47  [ТС] 17
Blood-Angel, Наверное, согласна. Дело в том, что файл - это для проверки, а на самом деле беру массив байт с модема и какая там кодировка - понятия не имею. Кстати, не могли бы Вы обяяснить разницу между форматами
C#
1
 hex.AppendFormat("{0:x} ", b);
и
C#
1
hex.AppendFormat("{0:x2} ", b);
Не нашла Спасибо!
0
Злой няш
1949 / 1384 / 508
Регистрация: 05.04.2010
Сообщений: 2,627
11.08.2011, 14:39 18
Разное форматирование.
Например, если просто x, то например число 2 будет отображаться как 2.
Если же x2, то число 2 будет отображаться как 02. То есть добавится ведущий ноль.
Если же x3, то число 2 будет отображаться как 002.

Добавлено через 20 минут
На всякий случай те же манипуляции с числом 17:
x - это 17
x2 - это 17
x3 - это 017
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.08.2011, 14:39

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

При нажатии на button выполнить свой код + код другого баттона
Как?

Код написан в Dev C. Не работает в Visual. Как нужно переделать код?
Здравствуйте. Столкнулась с такой проблемой: код был написан в Dev C, но в Visual он выдаёт...

Составить код, чтобы когда нажимаешь на клавиатуру, выводился Аски код
составить код, чтобы когда нажимаешь на клавиатуру, выводился Аски код

Как адаптировать код WMI под код Visual Studio 2010?
Доброе время суток всем. Подскажите пожалуйста для новичка, что бы можно было разобраться, как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.