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

 
 
 
Reply to this topicStart new topic
> Как можно кратко переписать приведенный код?
smk
сообщение Aug 18 2012, 12:57
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Код
unsigned char buf_rx[256];

struct dataexchange_t        
{
   unsigned char b1;        
   unsigned char b2;        
   unsigned char b3;        
   unsigned char b4;        
   unsigned char b5;        
   unsigned char b6;
   unsigned char b7;
   unsigned char b8;
   unsigned char b9;
   unsigned char b10;
   unsigned char b11;
   unsigned char b12;
   unsigned char b13;
   unsigned char b14;
   unsigned char b15;
   unsigned char b16;
   unsigned char b17;
   unsigned char b18;
   unsigned char b19;
   unsigned char b20;
   unsigned char b21;
   unsigned char b22;
   unsigned char b23;
   unsigned char b24;
   unsigned char b25;
   unsigned char b26;
   unsigned char b27;
   unsigned char b28;
   unsigned char b29;
   unsigned char b30;
   unsigned char b31;
   unsigned char b32;
   unsigned char b33;
   unsigned char b34;
   unsigned char b35;
   unsigned char b36;
   unsigned char b37;
   unsigned char b38;
   unsigned char b39;
   unsigned char b40;
   unsigned char b41;
   unsigned char b42;
   unsigned char b43;
   unsigned char b44;
   unsigned char b45;
   unsigned char b46;
   unsigned char b47;
   unsigned char b48;
   unsigned char b49;
   unsigned char b50;
   unsigned char b51;
   unsigned char b52;
   unsigned char b53;
   unsigned char b54;
   unsigned char b55;
   unsigned char b56;
   unsigned char b57;
   unsigned char b58;
   unsigned char b59;
   unsigned char b60;
   unsigned char b61;
   unsigned char b62;
   unsigned char b63;
   unsigned char b64;
   unsigned char b65;
};


Собственно код:

Код
      buf_rx[0] = pdata.b1;
      buf_rx[1] = pdata.b2;
      buf_rx[2] = pdata.b3;
      buf_rx[3] = pdata.b4;
      buf_rx[4] = pdata.b5;
      buf_rx[5] = pdata.b6;
      buf_rx[6] = pdata.b7;
      buf_rx[7] = pdata.b8;
      buf_rx[8] = pdata.b9;
      buf_rx[9] = pdata.b10;
      buf_rx[10] = pdata.b11;
      buf_rx[11] = pdata.b12;
      buf_rx[12] = pdata.b13;
      buf_rx[13] = pdata.b14;
      buf_rx[14] = pdata.b15;
      buf_rx[15] = pdata.b16;
      buf_rx[16] = pdata.b17;
      buf_rx[17] = pdata.b18;
      buf_rx[18] = pdata.b19;
      buf_rx[19] = pdata.b20;
      buf_rx[20] = pdata.b21;
      buf_rx[21] = pdata.b22;
      buf_rx[22] = pdata.b23;
      buf_rx[23] = pdata.b24;
      buf_rx[24] = pdata.b25;
      buf_rx[25] = pdata.b26;
      buf_rx[26] = pdata.b27;
      buf_rx[27] = pdata.b28;
      buf_rx[28] = pdata.b29;
      buf_rx[29] = pdata.b30;
      buf_rx[30] = pdata.b31;
      buf_rx[31] = pdata.b32;
      buf_rx[32] = pdata.b33;
      buf_rx[33] = pdata.b34;
      buf_rx[34] = pdata.b35;
      buf_rx[35] = pdata.b36;
      buf_rx[36] = pdata.b37;
      buf_rx[37] = pdata.b38;
      buf_rx[38] = pdata.b39;
      buf_rx[39] = pdata.b40;
      buf_rx[40] = pdata.b41;
      buf_rx[41] = pdata.b42;
      buf_rx[42] = pdata.b43;
      buf_rx[43] = pdata.b44;
      buf_rx[44] = pdata.b45;
      buf_rx[45] = pdata.b46;
      buf_rx[46] = pdata.b47;
      buf_rx[47] = pdata.b48;
      buf_rx[48] = pdata.b49;
      buf_rx[49] = pdata.b50;
      buf_rx[50] = pdata.b51;
      buf_rx[51] = pdata.b52;
      buf_rx[52] = pdata.b53;
      buf_rx[53] = pdata.b54;
      buf_rx[54] = pdata.b55;
      buf_rx[55] = pdata.b56;
      buf_rx[56] = pdata.b57;
      buf_rx[57] = pdata.b58;
      buf_rx[58] = pdata.b59;
      buf_rx[59] = pdata.b60;
      buf_rx[60] = pdata.b61;
      buf_rx[61] = pdata.b62;
      buf_rx[62] = pdata.b63;
      buf_rx[63] = pdata.b64;


Спасибо


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
ReAl
сообщение Aug 18 2012, 13:14
Сообщение #2


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Код
memcpy(buf_rx, &pdata, sizeof(pdata));

Ой, во если в стркутуре таки есть .b65, а втором фрагменте он таки не копируется, то
Код
memcpy(buf_rx, &pdata, sizeof(pdata)-1);


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Aug 18 2012, 13:17
Сообщение #3


Гуру
******

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



Цитата(smk @ Aug 18 2012, 15:57) *
Код
unsigned char buf_rx[256];

struct dataexchange_t        
{
   unsigned char b1;        
   unsigned char b2;        
   unsigned char b3;        
   unsigned char b4;        

   unsigned char b64;
   unsigned char b65;
};


Собственно код:

Код
      buf_rx[0] = pdata.b1;
      buf_rx[1] = pdata.b2;
      

      buf_rx[62] = pdata.b63;
      buf_rx[63] = pdata.b64;


Спасибо


Код
struct dataexchange_t {
   unsigned char Buffer[65];
};

buf_rx[0] = pdata.Buffer[0];

Go to the top of the page
 
+Quote Post
_Pasha
сообщение Aug 18 2012, 13:17
Сообщение #4


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



, ой там не биты, пардон.

Сообщение отредактировал _Pasha - Aug 18 2012, 13:20
Go to the top of the page
 
+Quote Post
smk
сообщение Aug 18 2012, 13:28
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Огромное спасибо. А обратная задача?
Код
      pdata.b1 = buf_tx[0];
      pdata.b2 = buf_tx[1];
      pdata.b3 = buf_tx[2];
      pdata.b4 = buf_tx[3];
      pdata.b5 = buf_tx[4];
      pdata.b6 = buf_tx[5];
      pdata.b7 = buf_tx[6];
      pdata.b8 = buf_tx[7];
      pdata.b9 = buf_tx[8];
      pdata.b10 = buf_tx[9];
      pdata.b11 = buf_tx[10];
      pdata.b12 = buf_tx[11];
      pdata.b13 = buf_tx[12];
      pdata.b14 = buf_tx[13];
      pdata.b15 = buf_tx[14];
      pdata.b16 = buf_tx[15];
      pdata.b17 = buf_tx[16];
      pdata.b18 = buf_tx[17];
      pdata.b19 = buf_tx[18];
      pdata.b20 = buf_tx[19];
      pdata.b21 = buf_tx[20];
      pdata.b22 = buf_tx[21];
      pdata.b23 = buf_tx[22];
      pdata.b24 = buf_tx[23];
      pdata.b25 = buf_tx[24];
      pdata.b26 = buf_tx[25];
      pdata.b27 = buf_tx[26];
      pdata.b28 = buf_tx[27];
      pdata.b29 = buf_tx[28];
      pdata.b30 = buf_tx[29];
      pdata.b31 = buf_tx[30];
      pdata.b32 = buf_tx[31];
      pdata.b33 = buf_tx[32];
      pdata.b34 = buf_tx[33];
      pdata.b35 = buf_tx[34];
      pdata.b36 = buf_tx[35];
      pdata.b37 = buf_tx[36];
      pdata.b38 = buf_tx[37];
      pdata.b39 = buf_tx[38];
      pdata.b40 = buf_tx[39];
      pdata.b41 = buf_tx[40];
      pdata.b42 = buf_tx[41];
      pdata.b43 = buf_tx[42];
      pdata.b44 = buf_tx[43];
      pdata.b45 = buf_tx[44];
      pdata.b46 = buf_tx[45];
      pdata.b47 = buf_tx[46];
      pdata.b48 = buf_tx[47];
      pdata.b49 = buf_tx[48];
      pdata.b50 = buf_tx[49];
      pdata.b51 = buf_tx[50];
      pdata.b52 = buf_tx[51];
      pdata.b53 = buf_tx[52];
      pdata.b54 = buf_tx[53];
      pdata.b55 = buf_tx[54];
      pdata.b56 = buf_tx[55];
      pdata.b57 = buf_tx[56];
      pdata.b58 = buf_tx[57];
      pdata.b59 = buf_tx[58];
      pdata.b60 = buf_tx[59];
      pdata.b61 = buf_tx[60];
      pdata.b62 = buf_tx[61];
      pdata.b63 = buf_tx[62];
      pdata.b64 = buf_tx[63];


memcpy( &pdata, buf_tx, sizeof(pdata)); так?


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Aug 18 2012, 13:31
Сообщение #6


Гуру
******

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



Цитата(smk @ Aug 18 2012, 16:28) *
Огромное спасибо. А обратная задача?
Код
      pdata.b1 = buf_tx[0];


memcpy( &pdata, buf_tx, sizeof(pdata)); так?

А не лень было структуру с таким количеством байт городить? Это ж замучатся можно?

И зачем она такая?
Go to the top of the page
 
+Quote Post
smk
сообщение Aug 18 2012, 13:33
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Єто не я городил. Будет время - переделаю, а пока код читабельней нужно


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
smk
сообщение Aug 18 2012, 17:49
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Чет не получается обратно. Делал так: memcpy(&pdata, buf_tx, sizeof(buf_tx)); Вроде работает, но при выходе из программы выдает ошибку. Может кто вкурсе что не так и как правильно?


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Aug 18 2012, 19:09
Сообщение #9


Гуру
******

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



Цитата(smk @ Aug 18 2012, 20:49) *
Чет не получается обратно. Делал так: memcpy(&pdata, buf_tx, sizeof(buf_tx)); Вроде работает, но при выходе из программы выдает ошибку. Может кто вкурсе что не так и как правильно?


buf_tx - это что? Это:
Код
unsigned char buf_rx[256];

?
Тогда вы 256 байт копируете.

Может так:
Код
memcpy(&pdata, buf_tx, sizeof(dataexchange_t));
,
или так:
Код
memcpy(&pdata, buf_tx, sizeof(pdata));

?
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Aug 18 2012, 19:30
Сообщение #10


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(smk @ Aug 18 2012, 20:49) *
memcpy(&pdata, buf_tx, sizeof(buf_tx));

Безопаснее всегда в sizeof() указывать размер приемника, дабы не спровоцировать краш.
Go to the top of the page
 
+Quote Post
smk
сообщение Aug 19 2012, 09:39
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата(_Артём_ @ Aug 18 2012, 22:09) *
buf_tx - это что? Это:
Код
unsigned char buf_rx[256];

?
Тогда вы 256 байт копируете.

Может так:
Код
memcpy(&pdata, buf_tx, sizeof(dataexchange_t));
,
или так:
Код
memcpy(&pdata, buf_tx, sizeof(pdata));

?

Точно! Я и забыл что он больше... Спасибо.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 19:58
Рейтинг@Mail.ru


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