Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.10.2015, 11:42   #21
Krasi
Форумчанин
 
Регистрация: 12.02.2010
Сообщений: 787
По умолчанию

Точно, я сначала просто это пытался сделать тщетно, а теперь получилось. Ну меня пока действительно так устроит, чтобы i была глобальной. А как сделать теперь, чтобы каждый символ зеркально не был отражен отражен по битам? Я понял, что в этой строчке int s1 = ((((byte)c & 1) != 0) ? 1 : 0); синтаксис устроен так, что она сравнивает биты с конца, а не сначала, а как можно это изменить?

Кстати, немного отойду от темы, но вопрос касается одной строчки из Вашего предложенного кода. А почему не получается сделать вот так?

Код:
string s1 = "";
foreach (char c in A) s1 = c.ToString();
this.Controls["richTextBox2"].Text = s1;
s1 покажет последний символ во всем сообщении, чего я и хотел.
Теперь я хочу сделать так, чтобы был массив s1:

Код:
string[] s1 = new string[6];
                foreach (char c in A) s1 = c;
Как тут лучше сделать, чтобы в каждом элементе массива был свой символ? Я же не могу поставить счетчик в foreach? Или могу?
Изображения
Тип файла: jpg 1.jpg (20.8 Кб, 120 просмотров)

Последний раз редактировалось Аватар; 14.10.2015 в 10:08.
Krasi вне форума Ответить с цитированием
Старый 13.10.2015, 13:54   #22
Krasi
Форумчанин
 
Регистрация: 12.02.2010
Сообщений: 787
По умолчанию

Я хотел сделать это, просто инвертировав очередность бит в байте перед вычислением бинарного кода, думал, что так прокатит:
Код:
char res = c; char x = c; int base1 = 256;
            while (x != 0)
            {
                res += (Char)((x & 1) * (base1 >>= 1));
                x >>= 1;
            }

            c = res;
но что-то не получается так. Стоит заметить, что в исходном коде не char res = c, а unsigned char = 0, что я не знаю, как в c# переписать. Может это и есть проблема.

Короче, задача в том, чтобы инвертировать порядок бит в каждом символе c, насколько я понял.

Ок, тогда давайте по-другому. Я понял, как биты в обратном порядке записать в строку.
Код:
int[] s2 = new int[8]; char x = c;
            for (int i = 0; x != '\0'; x = (char)((byte)x >> 1))
            {
                s2[i] = ((((byte)x & 1) != 0) ? 1 : 0);
                i++;
            }

            string s3 = ""; x = c;
            for (int i = 0; x != '\0'; x = (char)((byte)x >> 1))
            {
                s3 = s3 + s2[i].ToString();
                i++;
            }

            byte[] number1 = 



    c = (char)number1[0];
c = '\H' = 72 = 1001000. В s3 я получил 0001001. Но как преобразовать строку "0001001" таким образом, чтобы получился снова символ? Кодировка Unicode. Разве так сложно?

Тогда еще проще, скажите, пожалуйста, почему такой код отлично работает и выводит все символы кроме с != '\0'
Код:
for (; с != '\0'; c = (char)((byte)c >> 1))
            {
                s = ((((byte)c & 1) != 0) ? "1" : "0") + " " + s;
                int s1 = ((((byte)c & 1) != 0) ? 1 : 0);
                list.Add(icount, s1);
                icount++;
            }
А такой код зависает? Может я неправильно понимаю, когда надо остановить цикл и что делает строка с != '\0' ?

Код:
for (; ; c = (char)((byte)c >> 1))
            {
                s = ((((byte)c & 1) != 0) ? "1" : "0") + " " + s;
                int s1 = ((((byte)c & 1) != 0) ? 1 : 0);
                list.Add(icount, s1);
                icount++;
            }
А не, с этим разобрался
Код:
string s = "";
            for (int i = 0; i<8; c = (char)((byte)c >> 1))
            {
                s = ((((byte)c & 1) != 0) ? "1" : "0") + " " + s;
                int s1 = ((((byte)c & 1) != 0) ? 1 : 0);
                list.Add(icount, s1);
                icount++;
                i++;
            }
А дальше не понимаю

Последний раз редактировалось Аватар; 14.10.2015 в 10:09.
Krasi вне форума Ответить с цитированием
Старый 14.10.2015, 10:17   #23
Krasi
Форумчанин
 
Регистрация: 12.02.2010
Сообщений: 787
По умолчанию

Я сделал! А как теперь можно вывести на график не все выборки, а выводить только по 450 из них по очереди, и зациклить этот вывод? То есть чтобы все время был в программе цикл, пока я его не остановлю чем-нибудь. Задача в том, что я принципиально не хочу обрабатывать длинные массивы, поэтому мне бы систему вывести поближе к реальному времени, чтобы вся обработка, которую я в будущем хочу сделать в программе, происходила именно с 450 выборками сигнала, какой бы длинный весь файл не был, и чтобы остальные выборки ждали своей очереди
Изображения
Тип файла: jpg Безымянный.jpg (32.6 Кб, 104 просмотров)
Тип файла: jpg 7PSOGaZajNSt9lCV.jpg (22.8 Кб, 74 просмотров)

Последний раз редактировалось Krasi; 14.10.2015 в 10:22.
Krasi вне форума Ответить с цитированием
Старый 14.10.2015, 11:05   #24
Krasi
Форумчанин
 
Регистрация: 12.02.2010
Сообщений: 787
По умолчанию

Ок, подскажите, пожалуйста, что не так с кодом? По моим планам, я сейчас сделал кнопку, при нажатии на которую выводится по очереди бесконечно по 450 символов из сообщения. Хотелось бы уметь останавливать этот цикл повторным нажатием на кнопку, и запускать его снова, нажав затем на кнопку еще раз. По моей задумке выводимый текст должен постоянно обновляться и иметь фиксированную длину 56 символов, а график должен перерисовываться.
Код:
  private void button1_Click(object sender, EventArgs e)
        {
            btn1pos = !btn1pos;

            ////////////////////////////////////////////////////////////////Создание значений x

            if (btn1pos)
            {
                this.Controls["button1"].UseWaitCursor = false;
                /////////////////Представляем символы в двоичном виде и выводим на график/////////////////
                //////////////////////////////////////////////////////////////////////////////////////////  
                string A = richTextBox1.Text;
                string[] B = new string[1000];
                
                int i = 0;
                foreach (char x in A)
                {
                    B[nSymbol] += x;
                    i++;
                    if (i == 56) { i = 0; nSymbol++; } 
                }
                //this.Controls["richTextBox2"].Text = B[1];

                for (i = 1; ; i++)
                {
                    string bin_mes = asbin(B[i]);

                    this.Controls["richTextBox2"].Text = B[i];
                    if (i == nSymbol) i = 1;
                }
                
            }

            if (!btn1pos)
            {
                this.Controls["button1"].UseWaitCursor = true;
            }
        }
Почему у меня не получается это? В действительности график отображается изначально как 2 наложенных друг на друга графика, либо я просто не успеваю видеть этой разницы. Но текст не выводится вообще, просто белое окно ввода. Как лучше исправить это?

Кстати, вот так тоже вообще ничего не выводит на richTextBox2. Как так?

Код:
for (i = 1; ; i++)
                {
                    string bin_mes = asbin(B[i]);

                    this.Controls["richTextBox2"].Text = "sdfsdf";
                    Thread.Sleep(1000);
                    if (i == nSymbol) i = 1;
                }
У меня, наверное, значение строчки присваивается, но не находится функция, которая может обработать эту строчку
Код:
this.Controls["richTextBox2"].Text = "sdfsdf";
Поэтому проблема заметно упростилась. Как мне сделать так, чтобы у меня при нажатии на кнопку выполнялся цикл с обновлением хотя бы вышеприведенного текстового поля до тех пор, пока цикл не будет остановлен повторным нажатием на кнопку?

Ап, разве сложно? Банальная же тема. Смотрите, в Windows Forms мне просто надо сделать кнопку с двумя состояниями, при первом клике должен запуститься цикл, который может работать вечно до нажатия кнопки второй раз. В цикле должно все время обновляться хотя бы текстовое поле. Как это сделать?

Последний раз редактировалось Stilet; 15.10.2015 в 16:00.
Krasi вне форума Ответить с цитированием
Старый 15.10.2015, 14:51   #25
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Запусти таймер или нить
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 15.10.2015, 15:58   #26
Krasi
Форумчанин
 
Регистрация: 12.02.2010
Сообщений: 787
По умолчанию

А как и где ее/его именно запустить?
Код:
string s = "1";
            for (int i = 1; i < 5; i++)
            {
                //string bin_mes = asbin(B[i]);

                this.Controls["richTextBox2"].Text = s;
                s = s + i.ToString();
                Thread.Sleep(1000);
                //if (i == nSymbol) i = 1;
            }
Вот есть у меня такой цикл, так ведь пока он весь не выполнится, результат на экран не отображается. А как сделать так, чтобы окно вместе с циклом обновлялось?
Krasi вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывести byte в текстовую строку бинарными данными Krasi Помощь студентам 1 08.10.2015 15:42
Как построить граф,имея таблицу с данными? Вероника99 Помощь студентам 0 06.12.2014 20:38
Построить График МакаРомка! Паскаль, Turbo Pascal, PascalABC.NET 0 02.06.2013 11:17
Работа с бинарными данными. Lestar C# (си шарп) 0 04.11.2012 22:35
Работа с бинарными данными MyXa Общие вопросы .NET 1 31.01.2012 07:50