Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 09.10.2014
Сообщений: 55

Работать с массивом, как с набором различных по типу элементов

09.10.2014, 15:24. Показов 2044. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Посидел, пытался как-то перевести BYTE в wchar_t. Но так и не смог.. Не знаю, как даже сделать перевод.

Помогите пожалуйста.

Входные данные:
C++
1
BYTE Buff[65];
Засунуть в
C++
1
wchar_t N[65];
и наоборот
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.10.2014, 15:24
Ответы с готовыми решениями:

Как работать с массивом cell array (сортировать и искать количество нужных элементов)
Здравствуйте, уважаемые форумчане! Помогите пожалуйста разобраться как искать сумму нужных элементов в массиве cell. я экспортирую...

Как правильно работать с массивом?
$N = 1; @KonstruktorRj = (); for($U=0;$U<=58;$U++) { @KonstruktorRj = ('|! Туда...

Как работать с двумерным массивом?
Есть такой вот массив: int ary = { { 1, 2, 3, 4, 5 }, { 2, 4, 6, 8, 10 }, { 3, 6, 9, 12, 15 } Здесь 3 строки и 5...

31
 Аватар для Kabak
159 / 145 / 14
Регистрация: 03.02.2012
Сообщений: 788
Записей в блоге: 1
09.10.2014, 20:40
Студворк — интернет-сервис помощи студентам
в файл сохраняются смешанные данные разных типов ?
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
09.10.2014, 20:54
Лучший ответ Сообщение было отмечено trystyle как решение

Решение

Цитата Сообщение от trystyle Посмотреть сообщение
Buff всё равно не содержит в себе байты.
Указатель Buff позволяет после таких манипуляций обращаться к массиву данных файла, как к массиву двухбайтовых значений. По сути, это то же самое, что ты показал в 12-м посте.
Цитата Сообщение от trystyle Посмотреть сообщение
Допустим мне нужно изменить 4 байта, которые находятся начиная с 144 байта в массиве ( записать за место эих 4х, знаечние переменной типа int), как быть?
C++
1
2
3
4
5
//...
    BYTE *Buffer;
    //...
    int * i_var( reinterpret_cast< int * >( Buffer + 144 ) );
    * i_var = 255;
0
0 / 0 / 0
Регистрация: 09.10.2014
Сообщений: 55
09.10.2014, 21:18  [ТС]
Цитата Сообщение от Kabak Посмотреть сообщение
в файл сохраняются смешанные данные разных типов ?
Сам файл - это N-е количество записей, которые содержит в себе всё подряд и int, и wchar_t и т.д.
А я лишь редактирую его и сохраняю

Цитата Сообщение от BRcr Посмотреть сообщение
Указатель Buff позволяет после таких манипуляций обращаться к массиву данных файла, как к массиву двухбайтовых значений. По сути, это то же самое, что ты показал в 12-м посте.
Смотри, в файле начиная с 148 байта, идёт 64 байта текстовой информации.
Т.е. если я правильно понял, то после такого
C++
1
2
3
wchar_t *Buff( reinterpret_cast< wchar_t *> ( Buffer + 148 ) );
for (int i(0); i < 32; i++)
Buff[i] = тут буковки...
64 байта по смещению 148 будут заменены на другие русские слова. Верно?

Добавлено через 11 минут
UPD. Студия не перезапускалась. Теперь сам проверил, и правда работает. Спасибо огромное. Но в планах есть использовать динамический массив из Variant. Спрашиваю заранее, так как не знаю когда до них доберусь. Как быть с ними?

Добавлено через 1 минуту
C++
1
2
Variant *a = new Variant[size];
а вот как дальше быть?
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
09.10.2014, 21:19
Если под "тут буковки..." подразумевается, что в цикле за такт меняется по одному символу - то да, верно.

А так-то ничто не мешает использовать функцию типа wcsncpy()...
0
 Аватар для Kabak
159 / 145 / 14
Регистрация: 03.02.2012
Сообщений: 788
Записей в блоге: 1
09.10.2014, 21:21
Сам файл - это N-е количество записей, которые содержит в себе всё подряд и int, и wchar_t и т.д.
А я лишь редактирую его и сохраняю
Если какие-то данные сохраняются в файл как wchar_t их нужно и извлекать как wchar_t, только знать позицию, если сохраняемые строки фиксированной длинны. Если файл постоянно разного размера, то нужно читать массивом всё и по шаблону раскладывать по полочкам...
0
0 / 0 / 0
Регистрация: 09.10.2014
Сообщений: 55
09.10.2014, 21:40  [ТС]
Цитата Сообщение от Kabak Посмотреть сообщение
Если какие-то данные сохраняются в файл как wchar_t их нужно и извлекать как wchar_t, только знать позицию, если сохраняемые строки фиксированной длинны. Если файл постоянно разного размера, то нужно читать массивом всё и по шаблону раскладывать по полочкам...
Там фиксированное количество байт считать.

Цитата Сообщение от BRcr Посмотреть сообщение
А так-то ничто не мешает использовать функцию типа wcsncpy()...
Так там же в wchar_t засовывается немерное количество байт, а не именно 64;

И всё же остался вопрос насчёт Variant:
Цитата Сообщение от trystyle Посмотреть сообщение
Но в планах есть использовать динамический массив из Variant. Спрашиваю заранее, так как не знаю когда до них доберусь. Как быть с ними?
Добавлено через 1 минуту

Variant *a = new Variant[size];
а вот как дальше быть?
Добавлено через 15 минут
C++
1
2
a[ 1 ] (reinterpret_cast < Variant *> (Buffer + 144));
a[ 1 ] = 123;
как тут быть то.. по сути в Variant будет как int так и wchar_t лежать (либо то либо то)
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
09.10.2014, 21:48
Это хитрый тип. Сделай sizeof(Variant) и все поймешь...
Ну, и вот еще - http://docwiki.embarcadero.com... m.TVarData

Добавлено через 2 минуты
Цитата Сообщение от trystyle Посмотреть сообщение
Так там же в wchar_t засовывается немерное количество байт, а не именно 64;
Записывается то количество символов, которое ты укажешь. Укажи 32 символа - запишется 64 байта.
0
0 / 0 / 0
Регистрация: 09.10.2014
Сообщений: 55
09.10.2014, 21:48  [ТС]
Цитата Сообщение от BRcr Посмотреть сообщение
Это хитрый тип. Сделай sizeof(Variant) и все поймешь...
Понимаю что за тип.. но не понимаю как с ним это сделать..
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
09.10.2014, 22:02
А никак не сделать, Variant для этого не годится, увы.

Если хочешь удобно работать с массивом разнородных данных, то либо опиши структуры, согласно которым упорядочены данные в бинарнике, либо напиши интерфейс для голого массива, который будет предоставлять тебе указатели нужных типов с нужным смещением.
0
0 / 0 / 0
Регистрация: 09.10.2014
Сообщений: 55
09.10.2014, 22:37  [ТС]
Блин блин блин... надо тогда что-то придумать (

Добавлено через 5 минут
Цитата Сообщение от BRcr Посмотреть сообщение
либо напиши интерфейс для голого массива, который будет предоставлять тебе указатели нужных типов с нужным смещением
хммм... блин, я вот осознаю что моих знаний вообще ни на что не хватает я даже не представляю как это делается

Добавлено через 20 минут
BRcr, кстати спасибо больше, очень много подсказал

Добавлено через 8 минут
Всё додумал, как сделать "интерфейс". До меня дошло, что сделать можно. BRcr, огроооомнейшее спасибо. Kabak, дружище, тебе тоже спасибо, натолкнул тоже на кое какие мысли
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
09.10.2014, 23:00
Лучший ответ Сообщение было отмечено trystyle как решение

Решение

Цитата Сообщение от trystyle Посмотреть сообщение
Всё додумал, как сделать "интерфейс". До меня дошло, что сделать можно.
Прими во внимание также что-то типа такого:
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
class t_arr_interface
{
public:
    BYTE * arr;
    unsigned size;
    __fastcall t_arr_interface( /* ... */ )
    {
        // выделяем память, читаем данные с файла в массив
    }
    __fastcall ~t_arr_interface(  )
    {
        // освобождаем память
    }   
    template< typename _t >
    _t * __fastcall ptr_of_type( unsigned _offset )
    {
        if( _offset > ( size - sizeof( _t ) ) )
        {
            return NULL;
        }
        return reinterpret_cast< _t * >( arr + _offset );
    }
};
 
//...
 
t_arr_interface ai( /* ... */ );
double * dbl;
 
if( dbl = ai.template ptr_of_type< double >( 146 ) )
{
    * dbl = 6.556;
}
Правда, не уверен, что правильно все вспомнил... проверять надо.
0
0 / 0 / 0
Регистрация: 09.10.2014
Сообщений: 55
10.10.2014, 00:33  [ТС]
BRcr, огого, ооочень спасибо вообще
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.10.2014, 00:33
Помогаю со студенческими работами здесь

Как работать с массивом на PHP?
У меня есть запрос от API VK, который возвращает id всех друзей пользователя. Мне нужно каждый id выводить на новой строке, помогите...

Как работать с массивом в структуре?
На основе данных входного файла составить список студентов, включающий фамилию, факультет, курс, группу, 5 оценок. Вывести в новый файл ...

Как работать с таким json массивом?
Обычно это не представляет сложности $obj = json_decode($data); $my_var=$obj-&gt;{&quot;some_parametr_1&quot;}-&gt;{&quot;parametr_inside&quot;}; ...

Как работать со своим массивом пикселей в Qt?
Возможно вопрос не совсем корректный, но попытаюсь объяснить чего я хочу. Стоит задания написать растровый графический редактор. У меня...

Как правильно работать с таким массивом?
Есть файл, данные в котором могут быть представлены в виде двумерного массива (таблицы). Мне нужно поместить данные из этого файла в...


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

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru