Можете ли вы преобразовать массив символов со знаком в целое число без знака? - PullRequest
1 голос
/ 12 февраля 2012

У меня есть неподписанное целое число, которое было преобразовано в подписанный символ вроде этого

  unsigned int b = 128;
  char a[4];    

  a[0] = b >> 24;
  a[1] = b >> 16;
  a[2] = b >> 8;
  a[3] = b >> 0;

Не зная, какое значение b, могу ли я вернуть номер? Приведенный ниже метод не работает для чисел, превышающих 128. Кажется, что существует некоторая двусмысленность в получении числа обратно из массива.

  unsigned int c = 0;  
  c += a[0] << 24;
  c += a[1] << 16;
  c += a[2] << 8;
  c += a[3];

  cout<<c<<endl;

Ответы [ 2 ]

1 голос
/ 12 февраля 2012
unsigned int c = ((a[0] << 24) & 0xFF000000U)
               | ((a[1] << 16) & 0x00FF0000U)
               | ((a[2] <<  8) & 0x0000FF00U)
               | ( a[3]        & 0x000000FFU);

или

unsigned int c = unsigned(a[0]) << 24
               | unsigned(a[1]) << 16
               | unsigned(a[2]) <<  8
               | unsigned(a[3]);
0 голосов
/ 12 февраля 2012

Преобразование signed в unsigned не рекомендуется.Если вы хотите сделать это, вы должны сделать это вручную.Не легко, AFAIK.

Посмотрите на этот вопрос.

...