Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
23 / 23 / 6
Регистрация: 23.03.2013
Сообщений: 245

реверсировать список байтов

30.05.2013, 21:04. Показов 3841. Ответов 33
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
как сделать например из 01 02 03 04 ... это ... 04 03 02 01 ?

C++
1
2
3
4
5
6
7
8
9
10
11
void swapBytes( byte* v, size_t n )
{
   byte* in =  v;
   byte* it =  v;
   int t = n;
   for( ;t > 0 ;--t)
   {
       it[n-t] = in[t];
   }
   v = it;
}
данные const char* , но после вызова этой функции, бинарные данные превращаются в текст как сделать что бы этого не происходило?

Добавлено через 53 минуты
C++
1
#define SWAP(x) swapBytes( &x, sizeof(x) );
после вызова SWAP(const char *) в данных остается только текст и вообще они обрезаются и т.п
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.05.2013, 21:04
Ответы с готовыми решениями:

Реверсировать список
Необходимо сделать реверс списка , но без встроенной функции reverse (1 2 3 4 5 ) -> ( 5 4 3 2 1)

Как записать в файл список, состоящий из массива байтов?
Как записать в фаил список состоящий из массива байтов?

Реверсировать число
Пользователь вводит с клавиатуры число, необходимо перевернуть его (число) и вывести на экран.

33
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,931
Записей в блоге: 5
30.05.2013, 23:38
Студворк — интернет-сервис помощи студентам
Тогда и сделайте динамический массив. Какая разница. А вы сделали указатель на текстовую константу.
0
23 / 23 / 6
Регистрация: 23.03.2013
Сообщений: 245
30.05.2013, 23:47  [ТС]
ну вот мне это и нужно перевернуть, ну то что вы назвали , const char * , т.е память размером "len" начиная с const char *



например const char *, это указатель на ( размер 5 : ) 21 22 23 24 25 , мне нужно поменять местами эти 5 байт чтобы получилось: 25 24 23 22 21



эх..., как же сложно общаться с программистами, простым смертным как я
0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,931
Записей в блоге: 5
30.05.2013, 23:54
const перевернуть нельзя. На то она и константа. Делайте массив, хоть динамический, хоть какой. Его и переворачивайте.
1
23 / 23 / 6
Регистрация: 23.03.2013
Сообщений: 245
30.05.2013, 23:57  [ТС]
ну а virtualprotect . read/write memory и т.п, не помогут?
0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,931
Записей в блоге: 5
30.05.2013, 23:59
Цитата Сообщение от karaulov6 Посмотреть сообщение
ну а virtualprotect . read/write memory и т.п, не помогут?
Не понимаю о чем вы. Чему надо помочь? Разве у вас какие-то трудности?
0
23 / 23 / 6
Регистрация: 23.03.2013
Сообщений: 245
31.05.2013, 00:08  [ТС]
C++
1
2
3
4
5
6
7
8
char * swapBytes( char* v, size_t n )
{
   char * test1 = new char[n];
   int i = 0;
   for (;i<n;i++)
   memcpy(test1+i,v+n-i,1);
   return test1;
}
ну почему бы такому коду не работать? вроде все правильно написал, только копируется пустое место

Добавлено через 3 минуты
вот это более рабочий вариант, но первая буква не копируется

C++
1
2
3
4
5
6
7
8
9
10
char * swapBytes( char* v, size_t n )
{
    byte test2 = 0x00;
    char * test1 = new char[n];
    int i = 0;
    for (;i<(int)n;i++)
    memcpy(test1+i-1,v+n-i,1);
    memcpy(test1+n,&test2,1);
    return test1;
}
0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,931
Записей в блоге: 5
31.05.2013, 00:08
Этот код переворачивает данные в другое место, а исходные данные не меняются. Я же вас спрашивал про это. Но вы не стали отвечать.
0
23 / 23 / 6
Регистрация: 23.03.2013
Сообщений: 245
31.05.2013, 00:09  [ТС]
Цитата Сообщение от palva Посмотреть сообщение
Этот код переворачивает данные в другое место, а исходные данные не меняются. Я же вас спрашивал про это. Но вы не стали отвечать.

а как вы хотели перевернуть данные никуда их не скопировав? после возвращается уже перевернутый вариант...
0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,931
Записей в блоге: 5
31.05.2013, 00:12
Цитата Сообщение от karaulov6 Посмотреть сообщение
а как вы хотели перевернуть данные никуда их не скопировав?
Разве я не ответил вам, как это сделать, в первом же сообщении?
0
23 / 23 / 6
Регистрация: 23.03.2013
Сообщений: 245
31.05.2013, 00:22  [ТС]
Цитата Сообщение от palva Посмотреть сообщение
Не понимаю о чем вы. Чему надо помочь? Разве у вас какие-то трудности?
C++
1
2
3
4
5
6
7
8
9
10
11
12
void swapBytes( char* v, size_t n )
{
    byte test2 = 0x00;
    char * test1 = new char[n];
    int i = 0;
    for (;i<(int)n;i++)
    memcpy(test1+i-1,v+n-i,1);
    DWORD test3;
    VirtualProtect(v,n,PAGE_READWRITE,&test3);
    memcpy(v,test1,n);
    VirtualProtect(v,n,test3,NULL);
}
это почти работает, только не хочет копировать первый символ подскажете решение?

Добавлено через 9 минут
Наконец что-то получилось


C++
1
2
3
4
5
6
7
8
9
10
11
12
void swapBytes( void* v, size_t n )
{
    byte * test1 = new byte[n];
    int i = 0;
    DWORD test3;
    for (;i<(int)n;i++)
        memcpy(test1+n-i-1,(byte *)v+i,1);
    VirtualProtect(v,n,PAGE_READWRITE,&test3);
    memcpy(v,test1,n);
    VirtualProtect(v,n,test3,NULL);
    delete[] test1;
}
но правильно ли я написал? (не будет сюрпризов от такого кода?)
0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,931
Записей в блоге: 5
31.05.2013, 00:28
Не могу помочь. Я не знаю функции VirtualProtect. Да и не вижу нужды вникать, если есть рабочий код.
0
Модератор
Эксперт С++
 Аватар для zss
13789 / 10981 / 6492
Регистрация: 18.12.2011
Сообщений: 29,281
31.05.2013, 18:03
Цитата Сообщение от Jupiter Посмотреть сообщение
zss, v локальный указатель же. ещё и выделение памяти...
Да, действительно, сэкономить не удалось.
Придется так:
C++
1
2
3
4
5
6
7
8
9
void swapBytes( BYTE* v, size_t n )
{
   BYTE* it =  new byte[n];
   for(int t=0;t<=n-1 ;++t)
       it[n-1-t] = v[t];
   for(int t=0;t<=n-1 ;++t)
       v[t] = it[t];
   delete[] it;
}
0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,931
Записей в блоге: 5
31.05.2013, 18:18
zss, на этот раз вполне корректный код, по-моему.
Правда, число пересылок здесь 2n, а у меня все же меньше – (3/2)n
Да и выделение памяти забирает здесь какую-то часть ресурсов.
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
31.05.2013, 21:04
Цитата Сообщение от zss Посмотреть сообщение
Да, действительно, сэкономить не удалось.
C++
1
2
3
4
while ((first!=last)&&(first!=--last)) {
    std::iter_swap (first,last);
    ++first;
  }
https://www.cplusplus.com/refe... m/reverse/
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.05.2013, 21:04

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

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

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

Реверсировать каждое слово строки
Вообще никак не получается. Кто может подсказать, как это сделать? Есть вариант решения, но мне не подходит: // 5 задание.cpp:...

Как реверсировать (преобразовать обратно) хеш MD5?
Вот закодировал строку с помощью алгоритма MD5. 1 преобразовало в 06d49632c9dc9bcb62aeaef99612ba6b, как преобразовать обратно в 1? ...


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

Или воспользуйтесь поиском по форуму:
34
Ответ Создать тему
Новые блоги и статьи
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата) Этот документ предназначен для того, чтобы новый чат Claude мог продолжить работу без необходимости заново разбираться в. . .
сукцессия 15 неявная схема
anaschu 29.06.2026
Алиса Калибровка параметров симбиотической модели: технический обзор Содержание: Введение Постановка проблемы Технические аспекты реализации Процесс внедрения изменений
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0» https:/ / ibb. co/ NnkGpfMd Представленная интегрированная схема описывает непрерывную нелинейную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru