Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.78/40: Рейтинг темы: голосов - 40, средняя оценка - 4.78
1 / 1 / 1
Регистрация: 13.03.2012
Сообщений: 426

Запись байтов в массив char

22.05.2017, 16:47. Показов 9248. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть переменная типа
C++
1
char ch[7]
как можно записать туда числа в таком порядке в какой я хочу, у меня есть задача запихать в первые 2 байта число от 0 до 360
в 3 байт число от 1-10 в 4-5 байт число от 0 до 360 в 6-7 байт число от 0 до 360.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.05.2017, 16:47
Ответы с готовыми решениями:

Запись аудиофайла в массив байтов
привет!) подскажите пожалуйста, как записать аудио файл в массив байтов??? заранее спасибо

Запись звука в массив байтов
Если в кратце, то... то мне нужно получить байты с микрофона и записать из в массив/байтов. Я уже облазал пол инета в поиска нужных...

Запись строки char в массив char
Глупый вопрос, но что поделать, многое забыл... Хочу записть строку типа char в массив строк типа char, но выдает ошибку что...

23
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
22.05.2017, 21:19
Студворк — интернет-сервис помощи студентам
MasterOfAlteran, возможно. Но как уже сказал, с тем, что reinterpret_cast работала некорректно под VS2010 при реинтерпритации данных, уже сталкивался, а с некорректной работой union'а ещё нет. Тем более что если есть memcpy, то то же самое проделывается и вручную и кстати тоже неоднозначно (из-за порядка байтов)... Но там уже совсем не присваивания идут.
0
53 / 31 / 13
Регистрация: 21.05.2017
Сообщений: 109
22.05.2017, 21:49
Цитата Сообщение от palva Посмотреть сообщение
Тогда не очень понятно, зачем в C++ оставлен union. union как раз и применяется для того, чтобы одни и те же данные записывать одним типом, а читать другим
По ссылке выше написано зачем:
Цитата Сообщение от HelicopterK52 Посмотреть сообщение
Целью объединения является сохранение памяти, использую одну область памяти для хранения объектов в разное время. Вот и всё.
Теперь у нас еще имеется библиотечный std::variant, который для подобных целей подходит еще лучше, чем сырое объединение.
А проблемы с интерпретацией могут возникнуть уже при простой передаче двух указателей/ссылок в функцию:
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
//g++  5.4.0
 
#include <iostream>
 
 
union Some
{
    static_assert(sizeof(uint64_t) == sizeof(double), "sizes must be equals");
    uint64_t one;
    double two;
};
 
 
 
void foo(uint64_t &i, double &d)
{
    d = 30.0;
    i = 10u;
    std::cout << "foo: " << d << std::endl;
}
 
 
int main()
{
    Some s;
    s.two = 20.0;
    
    foo(s.one, s.two);
    std::cout << "foo: " << s.two << std::endl;
}
http://rextester.com/BUA66093
Виноват в этом не совсем union (хотя...), но допустить такую ситуацию в проекте с активным его использованием вполне возможно.

Добавлено через 12 минут
Цитата Сообщение от TRam_ Посмотреть сообщение
а с некорректной работой union'а ещё нет
В коде выше для CL достаточно поменять сигнатуру функции на void foo(uint64_t & i, double & __restrict d) и добавить опцию /O1 для получения "прелестей жизни": http://rextester.com/LNEI87224
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
22.05.2017, 22:55
Собственно если заменить ту конструкцию на такую:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
 
void foo(uint64_t &i, double &d)
{
    d = 30.0;
    i = 10u;
    std::cout << "foo: " << d << std::endl;
}
 
int main()
{
    double d;
    uint64_t *i = reinterpret_cast<uint64_t *>(&d);
     
    d = 20.0;
    
    foo(*i, d);
    std::cout << "foo: " << d << std::endl;
}
поведение будет в точности аналогично варианту с union Some. (что при /O3 оператор i = 10u; выполняется уже после std::cout)

Добавлено через 6 минут
Но вообще мне эта функция по смыслу напоминает функцию
C++
1
2
3
4
5
void foo(uint64_t &i, double &d)
{
    i = d;    
    std::cout << "foo: " << d << std::endl;
}
результат которой и по смыслу-то не определён (присвоение самому себе внутри себя), и в каком-то смысле похож на memcpy перекрывающихся областей.
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
26.05.2017, 19:40
В общем, нашёл про это подробную и доходчивую статью - https://habrahabr.ru/post/114117/
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.05.2017, 19:40

Запись символов в массив char
Не могу понять как сделать чтобы каждая буква массива введеная мною считалась как один элемент массива.(я тупой) Например: Ввод: guns ...

Запись числа в массив char
Нужно записать int число в виде char. То есть число записать по битам в массив. Как сделать ?

Char[], Запись из файла в массив
Есть проблема. Есть файл в котором хранятся двоичные числа. Нужно из файла записать строки этих чисел в char массив. Вот что я делаю и не...

Считывание из текстбоксов байтов и запись в массив
Добрый день. Возникла проблема Возникла потребность вводить в текстбоксы много значений и записывать их в массив Как это можно...

Сериализация изображения в массив байтов и запись в *.pas
Добрый день! Хотелось бы сериализовать изображения, которые будут использоваться в компоненте в массив байтов и поместить в pas файл, не...


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

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Новые блоги и статьи
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru