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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> обращение к байту 
:(
    Опции темы
kuvshinka
Дата 2.5.2010, 01:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



допустим есть переменная:
Код

unsigned short t=0xFF57;

она, как известно, занимает 2 байта...
а как мне получить (вывести на экран) содержимое i-ой (заданной) ячейки памяти данной переменной?
PM MAIL   Вверх
djamshud
Дата 2.5.2010, 01:27 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


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

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



Либо битовым сдвигами и масками, либо memcpy.

Код

int a=0x12345678;

for(int i=0;i<sizeof(a);i++)
printf("%X\n",(a>>i*8)&0xff);//сдвигаем нужный байт "вправо", "левые" три байта зануляем (наложением маски 0x000000FF, он же 0xff).

for(int i=0;i<sizeof(a);i++){
char c;
memcpy(&c,(char*)&a+i,1);//копируем один байт из буфера
printf("%X\n",c);}


Добавлено @ 01:32
Вместо memcpy можно обойтись более простым приведением типа:

Код

for(int i=0;i<sizeof(a);i++)
printf("%X\n",*((char*)&a+i));


Но это, как я где-то читал, небезопасно и приводит к ошибкам на некоторых (не экзотических) архитектурах.

Это сообщение отредактировал(а) djamshud - 2.5.2010, 01:32


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
mes
Дата 2.5.2010, 01:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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





--------------------
PM MAIL WWW   Вверх
kuvshinka
Дата 2.5.2010, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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

unsigned short t=0xFF57;
unsigned short s=0xFF22;
unsigned char q=11;
unsigned char f=0;
signed short x=125;


как мне наиболее простым способом перезаписать сей буфер в свой массив (чтобы его 0-ой элемент = значению переменной t из буфера, 1 элемент - пер-ой s и т.д. до конца буфера), побайтово проходясь по всему буферу?
тут надо как-то указателями оперировать...
дайте пож-та начинающему программеру полный примерчик - инициализация указанного выше буфера и его побайтовое считывание в отдельный массив...
PM MAIL   Вверх
djamshud
Дата 2.5.2010, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


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

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



Код

unsigned short t=0xFF57;
unsigned short s=0xFF22;
unsigned char q=11;
unsigned char f=0;
signed short x=125;

#define push2buf(var) memcpy(buf+_l,&var,sizeof(var));_l+=sizeof(var)
char buf[sizeof(t)+sizeof(s)+sizeof(q)+sizeof(f)+sizeof(x)];
size_t _l=0;
push2buf(t);
push2buf(s);
push2buf(q);
push2buf(f);
push2buf(x);
#undef push2buf




--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
kuvshinka
Дата 2.5.2010, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



да, но тогда получаестя, что в каждом элементе массива buf хранится один символ, а хотелось бы,  чтобы  "0-ой элемент массива = значению переменной t из буфера, 1 элемент - пер-ой s и т.д. до конца буфера"...
PM MAIL   Вверх
mes
Дата 2.5.2010, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(kuvshinka @  2.5.2010,  12:34 Найти цитируемый пост)
как мне наиболее простым способом перезаписать сей буфер 

что значит "сей буффер" ? чем представлен.

Цитата(kuvshinka @  2.5.2010,  12:34 Найти цитируемый пост)
в свой массив 

какого типа Ваш массив ? и массив ли ?


--------------------
PM MAIL WWW   Вверх
kuvshinka
Дата 2.5.2010, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



задача следующая - по сети передаются данные, записанные в буфер (допустим указанные выше переменные  t,s,q,f,x) - при их чтении я даю адрес своего буфера (я так понимаю чаровского (?) массива), в который скидывается копия передаваемых данных и начиная с которого (с адреса предоставляемого мной массива) я могу затем считать эти данные уже из моего этого "локального" массива...
вот и прошу примерчик на решение такой задачик - инициализация "сетевого" буфера и его считывание в другой локальный массив (в итоге я должен получить-считать значения элементов буфера (переменных t,s,q....) в какой-то свой массив (можно и структуру))...

Это сообщение отредактировал(а) kuvshinka - 2.5.2010, 19:55
PM MAIL   Вверх
Abyx
Дата 2.5.2010, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



kuvshinka, используй структуру (struct)
PM MAIL   Вверх
kuvshinka
Дата 2.5.2010, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Abyx: легко сказать - использую структуру - Вы примерчик дайте.... пожалуйста....smile 
PM MAIL   Вверх
Abyx
Дата 3.5.2010, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

struct Foo
{
     unsigned short t;
     unsigned short s;
     unsigned char q;
     unsigned char f;
     signed short x;
};

Foo foo;

recv(s, (void*)&foo, sizeof(foo), 0);

PM MAIL   Вверх
EvilsInterrupt
Дата 3.5.2010, 00:34 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

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



kuvshinka, 
Ты примеры не проси, ты бери готовые сорцы нужных тебе задач и пытайся понять их работу. Далее закрываешь, и пишешь сам ;) Получается как с англ. при изучении новых слов.
Настоятельно рекомендую обратиться к хорошему учебнику по программированию, где прорешать, про-тыкать, прочувствовать(читай проотлаживать) каждый пример из учебника!

Программист, как правило, редко спрашивает "хочу пример". Только когда он уже как миниму три раза сам попробовал ;)
PM MAIL WWW ICQ Jabber   Вверх
Abyx
Дата 3.5.2010, 09:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А еще лучше сразу выучить язык и не задавать таких вопросов.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

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


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

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


 




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


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

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