реклама на сайте
подробности

 
 
> [РЕШЕНО] Прочитать структуру по байтам (Си)
Alt.F4
сообщение Jul 14 2013, 12:14
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256



Здравствуйте.
Подскажите, пожалуйста, возможно ли как-то прочитать структуру по байтам на языке Си?
Т.е. как обычный массив: for(i=0;i!=size;i++) temp=array[i];
Хочу ничего не нарушая засунуть ее по байтам во внешнюю память и таким же образом потом считывать.
Спасибо.

Сообщение отредактировал Alt.F4 - Jul 14 2013, 14:36
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Alt.F4
сообщение Jul 14 2013, 14:10
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256



_Артём_, супер!!!

Подскажите, пожалуйста:
1. Как объявить указатель двухбайтовым, т.к. длина структуры больше 255?
На uint16_t * src=(uint8_t *)&S; компилятор ставит варнинг.
2. Как объявить структуру как внешнюю, типа extern struct?
Спасибо.

Сообщение отредактировал Alt.F4 - Jul 14 2013, 14:12
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Jul 14 2013, 14:25
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(Alt.F4 @ Jul 14 2013, 17:10) *
Подскажите, пожалуйста:
1. Как объявить указатель двухбайтовым, т.к. длина структуры больше 255?

Размер указателя зависит от архитектуры и компилятора. Если длина данных у вас не вмещается в байт, то используйте такой цикл:

Код
uint8_t * src=(uint8_t *)&S;
    uint8_t * dest=Buffer;
    for (uint16_t i=0; i<sizeof(STR); i++) //  uint16_t - можно копировать до 65535 байт,  uint32_t  - больше 4 млрд. байт
        *dest++=*src++;


Цитата(Alt.F4 @ Jul 14 2013, 17:10) *
На uint16_t * src=(uint8_t *)&S; компилятор ставит варнинг.


И правильно что ругается - приводите не к тому типу, надо к int16_t *.

Код
uint16_t * src=(uint16_t *)&S;


Цитата(Alt.F4 @ Jul 14 2013, 17:10) *
2. Как объявить структуру как внешнюю, типа extern struct?


Поместите в какой-нибудь инклуд:

Код
struct Data_t {

unsigned char A;

unsigned char B;

};

extern struct Data_t D;

А в ц-файл так:

Код
  
struct Data_t D;





Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th August 2025 - 03:51
Рейтинг@Mail.ru


Страница сгенерированна за 0.01357 секунд с 7
ELECTRONIX ©2004-2016