LINUX.ORG.RU

Оптимизация кода.


0

2

Подскажите пожалуйста, как можно «оптимизировать» такой код:

uint8_t *p;
j=htonl(i);
p=&j;
buff[i] = p[1];

По большей части не могу придумать как избавиться от временной переменной «j».

★★★★★

Последнее исправление: Jetty (всего исправлений: 1)

Второй байт выделить нужно? Лучше использовать операторы сдвига + битовые маски.

(i >> 8) & 0xff

creepnee
()
Ответ на: комментарий от Jetty

Спасибо. Ну это не совсем упрощение :), хотя и правда минус переменная. Пока что пользуюсь STL string

uint32_t tmp;
string raw;

tmp = htonl(intval);
raw += string((char *) &tmp, sizeof(tmp));
tmp = htonl(intval2);
raw += string((char *) &tmp, sizeof(tmp));

Jetty ★★★★★
() автор топика

Есть же union:

union {
  uint8_t p[4];
  uint32_t j;
} v;
v.j = htonl(i);
buff[i] = v.p[1];

Laz ★★★★★
()

Слишком искусственная проблема для оптимизации. Можно просто поставить этот участок в отдельную функцию/макрос.

mikki
()
Ответ на: комментарий от mikki

Лишняя строчка при большом количестве таких вот присвоений является совсем не искуственной. Хотелось чего-то в духе:
raw += (char *) &htonl(tmp);
Но это слишком брутально )

Jetty ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.