167 / 139 / 23
Регистрация: 02.01.2011
Сообщений: 913
1

ArrayList и массивы байтов

28.03.2011, 11:29. Показов 1563. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток!Есть баиты, приходящие с виртуального порта. По определенному алгоритму надо сохранять байты (я сохраняю в массиве), а потом при получении определенного символа(~) все эти байты посылать обратно. Алгоритм распознования когда посылать работает(уже. Но т.к. количество приходящих байтов неизвестно, хочу массив приходящих баитов записать в ArrayList, а потом превращаю из ArrayList в массив и посылаю. И...не работает Подскажите, пожалуйста, что не так? Спасибо
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
        bool Tilda = false;//
        string sT = "~";
        int k = 0;
        byte[] BuffTilda;
 public static  ArrayList TheBuff= new ArrayList();//собираю пакет
 private void axVSPortAx1_OnRxChar(object sender, AxVSPortLib._IVSPortAxEvents_OnRxCharEvent e)//event компонента axVSPortAx1 виртуальныи порт,срабатываеткогда порт получил данные
 {
        BuffTilda = Encoding.ASCII.GetBytes(sT) as byte[];
     byte[] Buff;//то, что получаю
     string sData = "";
     int ReceivedCnt = 0;
     labelT.Text = Convert.ToString(Tilda);
     Buff = axVSPortAx1.ReadArray(e.count) as byte[];
 
     sData = Encoding.ASCII.GetString(Buff);
     labelTest.Text = sData;
     if (sData.Equals(sT))
     {
         Tilda = true;
 
         if (k == 0)
         {
             MessageBox.Show("Tilda = true");
             k++;
             return;
         }
     }
 
     if ((Tilda == true) && (!(sData.Equals(sT))))
     {
        
 
         MessageBox.Show("Tilda == true  " + sData);//для проверки алгоритма
 
       
         for (int i = 0; i < Buff.Length; i++)
         {
             TheBuff.Add(Buff);//мне кажется, что ошибка здесь, а как исправить - не знаю
         }
 
          labelCount.Text = Convert.ToString(TheBuff.Count);
         lblLenghtTheBuff.Text = Convert.ToString(TheBuff.Count);
         listBox1.Items.Add(sData);
        string[] dataA1 = new string[TheBuff.Count];
         dataA1 = (string[])TheBuff.ToArray(typeof(byte)); 
         for (int i = 0; i < TheBuff.Count; i++)         
         {
          listBox2.Items.Add(dataA1);//ничего здесь не получаю
         }
 
 
 
         MessageBox.Show("Tilda=true" + sData);//для проверки алгоритма
 
     }
 
 
     if ((k > 0) && (sData.Equals("~")) && (Tilda == true) && ((TheBuff.Count > 0)))
     {
         MessageBox.Show(" sData=Tilda!!!!!!!!!!!!!!");//для проверки алгоритма
 
 
         ReceivedCnt = TheBuff.Count;
         labelT.Text = Convert.ToString(Tilda);
         labelReceivedCnt.Text = ReceivedCnt.ToString();
         ReceivedCnt = TheBuff.Count;
         byte[] data = new byte[TheBuff.Count];
 
         data = (byte[])TheBuff.ToArray(typeof(byte));
         string sdata = (string)TheBuff[TheBuff.Count];
 
         axVSPortAx1.WriteArray(data);//посылаю данные и НЕ РАБОТАЕТ!!!
 
             }
 }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.03.2011, 11:29
Ответы с готовыми решениями:

Класс с ArrayList, хранящий одномерные массивы
Нужно написать класс, в котором есть 2 листа массивов, один хранит простые значения, а второй...

Сканирование байтов в памяти, и получение начального адреса байтов
Привет форумчане! У меня вопрос, как просканировать память у процесса так, чтобы получить адрес...

Массивы байтов
Добрый день. Есть такое. procedure TForm1.Button5Click(Sender: TObject); var BytesHex:...

Массивы или ArrayList
В PL/SQL блоке производится обработка данных циклом, после каждого прохода цикла нужно запоминать...

6
гроза ленивых студентов
456 / 411 / 51
Регистрация: 27.03.2011
Сообщений: 823
28.03.2011, 11:46 2
эээ...я не очень понимаю твой код, если честно, но вот...смотри:
C#
1
byte[] Buff    -массив
C#
1
2
3
4
for (int i = 0; i < Buff.Length; i++)
{
TheBuff.Add(Buff);//мне кажется, что ошибка здесь, а как исправить - не знаю
}
я так понимаю, ты хочешь добавлять каждый байт. то есть - каждый элемент массива, а не весь его целиком на каждом шаге...

аналогично и тут:
C#
1
2
3
4
for (int i = 0; i < TheBuff.Count; i++)         
{
listBox2.Items.Add(dataA1);//ничего здесь не получаю
}

или это я про возможности шарпа чего-то не знаю?
0
167 / 139 / 23
Регистрация: 02.01.2011
Сообщений: 913
28.03.2011, 13:31  [ТС] 3
Спасибо, что отвечаешь. Задача такая. Принимаю баиты, сохраняю их в массиве Buff. Т.е. если получила abc , то их храню в Buff, ПОлучила ~, записываю массив Buff в ArrayList , переворачиваю в массив data и посылаю. По крайнеи мере, так должно быть. Но что-то видимо напортачила здорово! Не могу разобраться. Хелп, плиз!!!

Добавлено через 7 минут
Так тоже не работает..
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
        bool Tilda = false;//
        string sT = "~";
        int k = 0;
        byte[] BuffTilda;
 public static  ArrayList TheBuff= new ArrayList();//собираю пакет
 private void axVSPortAx1_OnRxChar(object sender, AxVSPortLib._IVSPortAxEvents_OnRxCharEvent e)//event компонента виртуальныи порт,срабатывает когда порт получил данные
 {
      BuffTilda = Encoding.ASCII.GetBytes(sT) as byte[];
     byte[] Buff;//то, что получаю
     string sData = "";
     int ReceivedCnt = 0;
     labelT.Text = Convert.ToString(Tilda);
     Buff = axVSPortAx1.ReadArray(e.count) as byte[];
 
 
     sData = Encoding.ASCII.GetString(Buff);
     labelTest.Text = sData;
     if (sData.Equals(sT))
     {
         Tilda = true;
 
         if (k == 0)
         {
             MessageBox.Show("Tilda = true");
             k++;
             return;
         }
     }
 
     if ((Tilda == true) && (!(sData.Equals(sT))))
     {
        
 
         MessageBox.Show("Tilda == true  " + sData);//ДЛЯ ПРОВЕРКИ АЛГОРИТМА
 
        TheBuff.Add(Buff); //НЕ РАБОТАЕТ
      
 
          labelCount.Text = Convert.ToString(TheBuff.Count);
         lblLenghtTheBuff.Text = Convert.ToString(TheBuff.Count);
         listBox1.Items.Add(sData);
        byte[] dataA1 = new byte[TheBuff.Count];
         dataA1 = (byte[])TheBuff.ToArray(typeof(byte)); 
         for (int i = 0; i < TheBuff.Count; i++)         
         {
          listBox2.Items.Add(Convert.ToString(dataA1));
         }
 
         MessageBox.Show("Tilda=true" + sData);//для проверки алгоритма
     }
 
 
     if ((k > 0) && (sData.Equals("~")) && (Tilda == true) && ((TheBuff.Count > 0)))
     {
       MessageBox.Show(" sData=Tilda!!!!!!!!!!!!!!");
 
         ReceivedCnt = TheBuff.Count;
         labelT.Text = Convert.ToString(Tilda);
         labelReceivedCnt.Text = ReceivedCnt.ToString();
         ReceivedCnt = TheBuff.Count;
         byte[] data = new byte[TheBuff.Count];
 
         for (int i = 0; i<TheBuff.Count;i++ )
         {
            TheBuff.CopyTo(data);
         }
             axVSPortAx1.WriteArray(data);//посылаю данные - безуспешно
          listBox2.Items.Add(data);
         if (ReceivedCnt != 0)
         {
             AddLog(Convert.ToString(ReceivedCnt) + " byte(s) read ");
             RecvBytes = RecvBytes + ReceivedCnt;
             textRecv.Text = Convert.ToString(RecvBytes);
             textBoxDataFromVirtPort.Text = sData;
         }
 
     }
 }
0
гроза ленивых студентов
456 / 411 / 51
Регистрация: 27.03.2011
Сообщений: 823
28.03.2011, 13:35 4
я имел в виду попробовать не
C#
1
TheBuff.Add(Buff); //НЕ РАБОТАЕТ
а
C#
1
2
3
4
         for (int i = 0; i < Buff.Length; i++)
         {
             TheBuff.Add(Buff[i]);
         }
1
167 / 139 / 23
Регистрация: 02.01.2011
Сообщений: 913
28.03.2011, 13:42  [ТС] 5
Спасибо огромное! С утра мучалась!!!!И вдогонку, а как обнулять ArrayList, чтобы посылать партиями, т.е. если пришло ~abc~df~, чтобы послалось abs, а потом df? TheBuff.Clear?
0
гроза ленивых студентов
456 / 411 / 51
Регистрация: 27.03.2011
Сообщений: 823
28.03.2011, 13:49 6
честно - не знаю... но возможно что и так... попробуй сделать как написала, поставь брекпойнт да посмотри отладчиком...
0
167 / 139 / 23
Регистрация: 02.01.2011
Сообщений: 913
28.03.2011, 13:57  [ТС] 7
Да, получилось!Спасибо!!!
0
28.03.2011, 13:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.03.2011, 13:57
Помогаю со студенческими работами здесь

Scanner, массивы, arraylist
есть класс Passage public class Passage { { idGenerator++; } private...

Двумерные массивы ArrayList
Подскажите как лучше сделать двумерный массив где одна длина известна например a в vba В java...

Выполнить чтение всех байтов с файла с помощью FileInputStream в массив байтов
Выполнить чтение всех байтов с файла с помощью FileInputStream в массив байтов. Создать строку...

Если увеличить объём кластера на флешке с 4048 байтов до 8192 байтов то она будет работать быстрей?
Как думаете если увеличить объём кластера на флешке с 4048 байтов до 8192 байтов то на будет...

В классе Use объявить ArrayList и добавить в каждый элемент ArrayList ID, Name, Text, Song
народ помогите есть класс Card и класс Use, код бросил, namespace KURSOVA { class Card ...

ArrayList: необработанное исключение. Операции над множествами с использованием ArrayList
Задача: разработать калькулятор для логических множеств ( для операций пересечение, объединение,...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru