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

 
 
 
Reply to this topicStart new topic
> Помогите начинающему с СИ, Число в массив?
Serguey_A
сообщение Mar 7 2007, 10:18
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 35
Регистрация: 12-09-06
Из: Москва СВАО
Пользователь №: 20 316



Помогите начинающему.
Как преобразовать число в массив?

Есть число
int A=64 //меняется от 0 до 4000
надо преобразовать в двоичное и получить массив
str[13]={0,0,0,0,0,0,1,0,0,0,0,0,0};

LPC2106/IAR4,40
Go to the top of the page
 
+Quote Post
kichkine
сообщение Mar 7 2007, 10:27
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 33
Регистрация: 3-11-06
Из: Kiev
Пользователь №: 21 933



Цитата(Serguey_A @ Mar 7 2007, 09:18) *
Помогите начинающему.
Как преобразовать число в массив?

Есть число
int A=64 //меняется от 0 до 4000
надо преобразовать в двоичное и получить массив
str[13]={0,0,0,0,0,0,1,0,0,0,0,0,0};

LPC2106/IAR4,40


Каждый бит в свой отдельный байт? Тогда str должен быть явно не меньше 32-х.
Если leading zeros надо отбросить - уменьшить счетчик цикла.

for(i = 0; i < 8*sizeof(int); i++){
if(A & (1 << i)){
str[31-i] = 1;
}else{
str[31-i] = 0;
}
}
Go to the top of the page
 
+Quote Post
Ivan_Kov
сообщение Mar 7 2007, 10:33
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 174
Регистрация: 30-10-06
Из: г. Курск
Пользователь №: 21 787



Цитата(Serguey_A @ Mar 7 2007, 10:18) *
Помогите начинающему.
Как преобразовать число в массив?

Есть число
int A=64 //меняется от 0 до 4000
надо преобразовать в двоичное и получить массив
str[13]={0,0,0,0,0,0,1,0,0,0,0,0,0};

LPC2106/IAR4,40


типа того
Код
void IntToBin(int N,char *Str)
{
   unsigned int i,Msk;
   Msk=0x80000000;
   i=0;
   while(Msk)
   {
      if(N&Msk)
         Str[i]='1';
      else
         Str[i]='0';
      i++;
      Msk=Msk>>1;
   };
   Str[i]=0;
};

только кажется мне, к арму это не имеет отношения
Go to the top of the page
 
+Quote Post
Serguey_A
сообщение Mar 7 2007, 10:53
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 35
Регистрация: 12-09-06
Из: Москва СВАО
Пользователь №: 20 316



Спасибо за помощь.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 7 2007, 15:53
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Serguey_A @ Mar 7 2007, 09:53) *
Спасибо за помощь.
Возможен и такой вариант
Код
#define SIZE_BITS(var)  (sizeof(var) * __CHAR_BITS__)
void IntToBin(int N,char *Str)
{
    uint8_t i;
    for(i =0; i < SIZE_BITS(N); i++)
    {
        if(N & (1 << (SIZE_BITS(N) - 1)))
            *Str++ = '1';
        else
            *Str++ = '0';

        N <<= 1;
    }
}

#undef SIZE_BITS


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

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

 


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


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