С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
 Аватар для Dulliane
0 / 0 / 0
Регистрация: 02.04.2014
Сообщений: 72

Значения не записываются в массив

14.05.2014, 17:18. Показов 2163. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
private void Play(double[] PSignal, string fileName)
        {
            byte[] resultbytes = new byte[PSignal.Length * 3 + 43];
            BinaryReader br = new BinaryReader(File.OpenRead(fileName), Encoding.ASCII);
            br.ReadBytes(43).CopyTo(resultbytes,0);
            br.Close();
            for (int i = 0, j = 0; i < PSignal.Length; j += 3, i++)
            {
                resultbytes[42 + j] = BitConverter.GetBytes(PSignal[i])[0];
                resultbytes[43 + j] = BitConverter.GetBytes(PSignal[i])[1];
                resultbytes[44 + j] = BitConverter.GetBytes(PSignal[i])[2];
            }
        }
всем привет. пишу метод для конвертации дабл массива в байтовый для дальнейшего преобразования в поток, чтобы потом все это дело послушать как wav. не могу понять почему в массив resultbytes не идет запись в цикле. а именно начиная с 44 индекса все нули после цикла
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.05.2014, 17:18
Ответы с готовыми решениями:

Не записываются числа из файла в массив
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace...

В массив не записываются значения
В массив не записываются значения :( Заранее спасибо за помощь #include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; #include...

В массив не правильно записываются значения
Такая задача: Из массивов А и В сформировать массив С, записав в него элементы массивов А и В с четными индексами Вот как я пытался...

14
1167 / 885 / 517
Регистрация: 09.04.2014
Сообщений: 2,095
14.05.2014, 17:45
может стоит попроще?
C#
1
2
3
4
5
6
7
8
9
10
11
12
private void Play(double[] PSignal, string fileName)
        {
            List<byte> result = new List<byte>(PSignal.Length * 3 + 43);
            BinaryReader br = new BinaryReader(File.OpenRead(fileName), Encoding.ASCII);
            result.AddRange(br.ReadBytes(43));
            br.Close();
            foreach (var signal in PSignal)
            {
                result.AddRange(BitConverter.GetBytes(signal));
            }
            byte[] resultbytes = result.ToArray(); //если уж нужно byte[]
        }
Добавлено через 3 минуты
Цитата Сообщение от Dulliane Посмотреть сообщение
не идет запись в цикле. а именно начиная с 44 индекса все нули после цикла
а Вы проследите значения индексов в массиве куда Вы вносите данные для j=0,1,2... и окажется, что Вы надписываете елементы массива при каждой итерации
1
 Аватар для Dulliane
0 / 0 / 0
Регистрация: 02.04.2014
Сообщений: 72
14.05.2014, 18:02  [ТС]
Вы проследите значения индексов в массиве куда Вы вносите данные для j=0,1,2... и окажется, что Вы надписываете елементы массива при каждой итерации
не понял. даже на самом первом шаге ничего не присваивается здесь
C#
1
resultbytes[42 + j] = BitConverter.GetBytes(PSignal[i])[0];
что значит надписываю?
0
1167 / 885 / 517
Регистрация: 09.04.2014
Сообщений: 2,095
14.05.2014, 18:05
Цитата Сообщение от Dulliane Посмотреть сообщение
что значит надписываю?
j=0 >> 42 43 44
j=1 >> 43 44 45
...
0
 Аватар для Dulliane
0 / 0 / 0
Регистрация: 02.04.2014
Сообщений: 72
14.05.2014, 18:07  [ТС]
C#
1
j += 3
0
1167 / 885 / 517
Регистрация: 09.04.2014
Сообщений: 2,095
14.05.2014, 18:12
C#
1
2
3
4
5
6
7
8
9
10
int idx = 43;
            for (int i = 0; i < PSignal.Length; i++)
            {
                byte[] b = BitConverter.GetBytes(PSignal[i]);
                for (int j = 0; j < 3; j++)
                {
                    resultbytes[idx] = b[j];
                    idx++;
                }
            }
Добавлено через 1 минуту
Цитата Сообщение от Dulliane Посмотреть сообщение
j += 3
недоглядел
0
 Аватар для Dulliane
0 / 0 / 0
Регистрация: 02.04.2014
Сообщений: 72
14.05.2014, 18:16  [ТС]
тут в самом получвшемся байтовом массиве после конвертации сначала нули идут, вот и записывает нули b[]
0
1167 / 885 / 517
Регистрация: 09.04.2014
Сообщений: 2,095
14.05.2014, 18:19
1. все равно, с индексами не порядок, так как PSignal нужно начинать вносить с 43 байта, а не с 42 (это не влияет на значения, но все же)
2. проверьте значения в PSignal
0
 Аватар для Dulliane
0 / 0 / 0
Регистрация: 02.04.2014
Сообщений: 72
14.05.2014, 18:21  [ТС]
1)исправил
2)не знаю , значения как значения ,
0
1167 / 885 / 517
Регистрация: 09.04.2014
Сообщений: 2,095
14.05.2014, 18:28
Цитата Сообщение от Dulliane Посмотреть сообщение
пишу метод для конвертации дабл массива в байтовый для дальнейшего преобразования в поток
а почему бы сразу не записывать их в поток (MemoryStream)? А те 43 байта с файла - это стандартный header wav-файла? Его то лучше внести в код как костанту, а не читать с файла - быстрее и не страшно, что кто-то файл удалит.
0
 Аватар для Dulliane
0 / 0 / 0
Регистрация: 02.04.2014
Сообщений: 72
14.05.2014, 18:32  [ТС]
блин, вообще пробиваюсь сквозь стену неведания чего нужно делть, потому все так сложно делаю.
А те 43 байта с файла - это стандартный header wav
да. хорошо попробую.
0
1167 / 885 / 517
Регистрация: 09.04.2014
Сообщений: 2,095
14.05.2014, 19:36
И еще один мелкий нюанс: double занимает 8 байт, а не 3.... Вы уверенны, что Вам нужно первых 3?

Добавлено через 8 минут
Для почитать Synthesizing Simple Wave Audio using C#
0
 Аватар для Dulliane
0 / 0 / 0
Регистрация: 02.04.2014
Сообщений: 72
14.05.2014, 21:20  [ТС]
дело в том, что в методе считывания
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
......................
for (long i = 0; i < SumCO; i++)
            {
                buffer[0] = br.ReadByte();
                buffer[1] = br.ReadByte();
                buffer[2] = br.ReadByte();
                if (((sbyte)buffer[2]) < 0)
                {
                    buffer[3] = 0xff;
                }
                else
                {
                    buffer[3] = 0;
                }
                Data[i] = BitConverter.ToInt32(buffer, 0);
            }
метод считывания wav нне мой, я не пойму почему именно они по 4 байта считывали, мне почему то сказали здесь три первых байта от числа брать.
слушай, а можно с тобой где-то вне форума пообщаться, мб направишь меня на путь истинный, ато я совсем потерянный студент vk например...
0
1167 / 885 / 517
Регистрация: 09.04.2014
Сообщений: 2,095
14.05.2014, 22:47
Цитата Сообщение от Dulliane Посмотреть сообщение
Data[i] = BitConverter.ToInt32(buffer, 0);
так данные Int32[], а не double[]
Цитата Сообщение от Dulliane Посмотреть сообщение
double[] PSignal
Цитата Сообщение от Dulliane Посмотреть сообщение
а можно с тобой где-то вне форума пообщаться
нет меня нигде кроме тут

Добавлено через 5 минут
Цитата Сообщение от Dulliane Посмотреть сообщение
три первых байта от числа брать
Видимо предполагается 24 битный wav, как видишь 4 байт генерируется самой программой, т.е. не содержит считываемых данных
0
 Аватар для Dulliane
0 / 0 / 0
Регистрация: 02.04.2014
Сообщений: 72
15.05.2014, 13:18  [ТС]
изменил код
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
private void Play(double[] PSignal, string fileName)
        {
byte[] resultbytes = new byte[PSignal.Length * 4 + 43];
                BinaryReader br = new BinaryReader(File.OpenRead(fileName), Encoding.ASCII);
                br.ReadBytes(43).CopyTo(resultbytes, 0);
                br.Close();
                
                byte[] longg = BitConverter.GetBytes(PSignal.Length);
                for (int l = 0; l <= 3; l++)
                    resultbytes[39 + l] = longg[l];
                
                int idx = 43;
                for (int i = 0; i < PSignal.Length; i++)
                {
                    int tmp = (int)PSignal[i];
                    byte[] b = BitConverter.GetBytes(tmp);
                    for (int j = 3; j >= 0; j--, idx++) // если брать j = 0; j <= 3; j++ то не работает. это как то связано с little-endian предствалением ? 
                        resultbytes[idx] = b[j];
                }
                new SoundPlayer(new MemoryStream(resultbytes)).Play();
}
копирую заголовок от старого wav , переписываю значение длины в нем, далее записываю все в байтовый массив как и было. но теперь меня ошибка доступа к памяти на последней строке кода. не понимаю что не так.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.05.2014, 13:18
Помогаю со студенческими работами здесь

В БД не записываются значения
Этот сервис обрабатывает поступившее сообщение. sms_body_name и sms_body_text имеют нужные значения (строка 65 и 66), а вот в БД вообще...

Не записываются значения в форму
Добрый день! Последовательность действий такая : запрашиваю json файл и распарсиваю его, далее эти значения кладу в форму coeff через цикл....

Значения не записываются в файл
Значения переменной y не записываются в файл, компилятор CodeBlocks. Подскажите, где ошибка? #include &lt;iostream&gt; #include...

Записываются не те значения что ввожу...
Здравствуйте.Вроде все работало, но в очередной запуск формы начали принимать значения одни а в базе записываются другие не могу что не так...

В выходной фаил записываются вместе с ответом записываются каракули. Помогите исправить ошибку
#include &lt;iostream&gt; using namespace std; void funk (int n, int k) { freopen(&quot;input.txt&quot;, &quot;rt&quot;, stdin); ...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru