Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как скопировать в переменную данные из памяти 
:(
    Опции темы
tenebris
Дата 12.10.2008, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 20.1.2008

Репутация: нет
Всего: нет



Привет!!!
Скажите, есть переменная типа long. Как мне из памяти скопировать в эту переменную 4 байта. Я так понимаю нужно использовать функцию memcpy. Но у меня ничего не получается. Или я ошибаюсь?
PM MAIL   Вверх
mr.Anderson
Дата 12.10.2008, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: нет
Всего: 128



tenebris, нет, не ошибаешься.
Цитата(Википедия)

void *memcpy(void *dst, const void *src, size_t n);

где:

    * dst — адрес буфера назначения
    * srс — адрес источника
    * n — количество байт для копирования

Если ты копируешь из памяти некоторые 4 байта, то ты должен знать их адрес (это будет источник), в буфере назначения указываешь свою переменную, а в n - sizeof(тип).

Это сообщение отредактировал(а) mr.Anderson - 12.10.2008, 13:51


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
tenebris
Дата 12.10.2008, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 20.1.2008

Репутация: нет
Всего: нет



long pc;
long arg;
memcpy(arg,buf[pc],4);
ругается 
cannot convert parameter 2 from 'unsigned char' to 'const void *'
PM MAIL   Вверх
586
Дата 12.10.2008, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 10
Всего: 146



Код
//unsigned char *buf;
long pc;
long arg;
//...
memcpy(&arg, &buf[pc], sizeof(long));

PM   Вверх
Lazin
Дата 12.10.2008, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



а операторы присваивания отменили?
Код

long from;
long to;
to = from;

либо
Код

char* array;
....
long to;
to = *reinterpret_cast<long*>(array);

PM MAIL Skype GTalk   Вверх
mr.Anderson
Дата 12.10.2008, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: нет
Всего: 128



Lazin, ну, мало ли, может, именно так надо.

Амперсанды перед переменными обязательны, передаются адреса, а не сами переменные.

Это сообщение отредактировал(а) mr.Anderson - 12.10.2008, 13:42


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
tenebris
Дата 12.10.2008, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 20.1.2008

Репутация: нет
Всего: нет



Чё за на ,  почему он байты в обратном порядке? как от этого избавиться?
Можно ан чистом си, плиз, с++ не знаю.

Это сообщение отредактировал(а) tenebris - 12.10.2008, 13:51
PM MAIL   Вверх
mr.Anderson
Дата 12.10.2008, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: нет
Всего: 128



tenebris, что значит и в обратном порядке читает? Код приведи.

Это сообщение отредактировал(а) mr.Anderson - 12.10.2008, 13:50


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
586
Дата 12.10.2008, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 10
Всего: 146



Цитата
почему он байты в обратном порядке? как от этого избавиться?

Это порядок байтов Little Endian (так числа в памяти компьютера представляются)
PM   Вверх
tenebris
Дата 12.10.2008, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 20.1.2008

Репутация: нет
Всего: нет



Дамп в памяти такой

bytes: 4A B9 00 A1 00 08 66 06 4A 79
А выводит наоборот. Что теперь декодить ещё надо чтоли?
 800a100

PM MAIL   Вверх
mr.Anderson
Дата 12.10.2008, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: нет
Всего: 128



tenebris, постом выше тебе дали линк на представление чисел в компьютере, почитай, там по твоему вопросу много интересного написано.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
tenebris
Дата 12.10.2008, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 20.1.2008

Репутация: нет
Всего: нет



Прочёл, как это можно исправить или никак?
Функию декодировки писать?
PM MAIL   Вверх
mr.Anderson
Дата 12.10.2008, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: нет
Всего: 128



Цитата
как это можно исправить

Ну разве что процессор сменить на x64, там вроде как прямой порядок должен быть, если я все правильно понял из беглого прочтения.

Насчет решения не подскажу... Вообще, вопрос интересный...

Это сообщение отредактировал(а) mr.Anderson - 12.10.2008, 14:09


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
vinter
Дата 12.10.2008, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



Цитата(mr.Anderson @  12.10.2008,  15:09 Найти цитируемый пост)
если я все правильно понял из беглого прочтения.

не правильно ты понял

Добавлено через 4 минуты
Цитата(tenebris @  12.10.2008,  15:07 Найти цитируемый пост)
Прочёл, как это можно исправить или никак?Функию декодировки писать?


tenebris, читать ссылку данную тебе до просветления.


--------------------
Мой блог
PM MAIL WWW   Вверх
mr.Anderson
Дата 12.10.2008, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: нет
Всего: 128



vinter, почему неправильно? Там написано, что такой порядок (обратный) характерен для архитектуры x86, поэтому я предположил, что на x64 такого уже нет, раз там не упоминается...


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1033 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.