Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > из int в char. ну очень надо!!!!


Автор: utang 14.12.2009, 20:37
Ребята помогите, возникла такая проблема: дано 4 числа типа int,в них используются только младшие байты.надо из них собрать последовательно один long .есть код : 

long to32bit(int c1,int c2,int c3,int c4)
{
  long value = 0L;

  value = (c1 & 0xff);
  value = (value<<8) + (c2 & 0xff);
  value = (value<<8) + (c3 & 0xff);
  value = (value<<8) + (c4 & 0xff);
  return (value);
}

он работает отлично, но блин , проблема в том ,что все это надо  реализовать через указатели, но вызов функции должен быть таким же.И ЕЩЕ ВСЕ ЭТО ПОД MS_DOS.

Автор: artsb 14.12.2009, 21:45
Код

long* to32bit(int *c1,int *c2,int *c3,int *c4)
{
  long *value = new long;
  *value = 0L;

  *value = (*c1 & 0xff);
  *value = (*value<<8) + (*c2 & 0xff);
  *value = (*value<<8) + (*c3 & 0xff);
  *value = (*value<<8) + (*c4 & 0xff);
  return value;
}


Цитата(utang @  14.12.2009,  20:37 Найти цитируемый пост)
но вызов функции должен быть таким же

тогда не получится с указателями. юзайте ссылки.

Автор: utang 14.12.2009, 21:47
блин, без битовых сдвигов

Автор: artsb 14.12.2009, 22:49
Цитата(utang @  14.12.2009,  21:47 Найти цитируемый пост)
блин, без битовых сдвигов 

?

Автор: utang 14.12.2009, 22:57
надо переписать эту функцию с использованием указателей и без битовых сдвигов(<< и >>)

Автор: xvr 15.12.2009, 12:21
Код

long to32bit(int c1,int c2,int c3,int c4)
{
  long value = 0L;
  char* p = (char*)&value;

  p[0]=c4;
  p[1]=c3;
  p[2]=c2;
  p[3]=c1;
 
  return (value);
}


Автор: utang 15.12.2009, 13:21
Спасибо огромное!!!! 

Автор: utang 22.12.2009, 16:18
 а как еще можно это написать? smile 

Автор: xvr 22.12.2009, 20:47
Ну например так
Код

long to32bit(int c1,int c2,int c3,int c4)
{
  long value = 0L;
  char* p = (char*)&value;
  *p++=c4;
  *p++=c3;
  *p++=c2;
  *p=c1;
 
  return (value);
}

Автор: utang 22.12.2009, 23:07
это одно и тоже))) а можно это написать с объединением или структурой????

Автор: shklowsky 22.12.2009, 23:49
Код

long to32bit(int c1,int c2,int c3,int c4)
{
 union
 {
 long l;
 byte b[4];
 }u;
u.b[3]=c1&0x000000FF;
u.b[2]=c2&0x000000FF;
u.b[1]=c3&0x000000FF;
u.b[0]=c4&0x000000FF;
return u.l;
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)