powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Массив Int в байты.
25 сообщений из 25, страница 1 из 1
Массив Int в байты.
    #38641917
GorloPavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте. Есть массив int[32] из последовательности чисел 10101001... . Получается 4 байта представленных в таком виде. Как мне перевести этот массив в byte[4] который бы содержал эти самые байты. Спасибо!
...
Рейтинг: 0 / 0
Массив Int в байты.
    #38641968
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GorloPavelint[32] из последовательности чисел 10101001... . Получается 4 байта
массив из 32 целых - это несколько больше, чем 4 байта
...
Рейтинг: 0 / 0
Массив Int в байты.
    #38641980
GorloPavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилGorloPavelint[32] из последовательности чисел 10101001... . Получается 4 байта
массив из 32 целых - это несколько больше, чем 4 байта

Массив из 32 элементов. В нем содержатся 0 и 1. Последовательность из 8 int-ов в данном случае 1 байт представленный в виде 10101001 . Вот мне надо всю эту последовательность перевести в байты.
...
Рейтинг: 0 / 0
Массив Int в байты.
    #38641983
GorloPavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Итого получается 4 байта закодированные в int[32]. Надеюсь понятно объяснил :)
...
Рейтинг: 0 / 0
Массив Int в байты.
    #38641986
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вариант 1: прямой typecast указателей. Работает только если машина нужной endianess.
Вариант 2: union и присваивание по одному байту.
Вариант 3: Сдвиги и опять же присваивание.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Массив Int в байты.
    #38641993
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GorloPavelЗдравствуйте. Есть массив int[32] из последовательности чисел 10101001... .

Код: plaintext
1.
2.
3.
4.
5.
int[32] a;
a[31] = 1;
a[30] = 0;
a[29] = 1;
...


так ?
...
Рейтинг: 0 / 0
Массив Int в байты.
    #38642094
Фотография Маслов Андрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GorloPavelИтого получается 4 байта закодированные в int[32]. Надеюсь понятно объяснил :)
Не очень, у вас получается 32 * 4 = 128 байт информации, или последовательность из 0 и 1 длиной в 1024 бита.
При условие, что тип int равен 4 байтам.
...
Рейтинг: 0 / 0
Массив Int в байты.
    #38642101
Фотография Маслов Андрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Маслов АндрейGorloPavelИтого получается 4 байта закодированные в int[32]. Надеюсь понятно объяснил :)
Не очень, у вас получается 32 * 4 = 128 байт информации, или последовательность из 0 и 1 длиной в 1024 бита.
При условие, что тип int равен 4 байтам.

Или вы храните в int число вида:
10101010 - 1 int
10101110 - 2 int
11101010 - 3 int
10101011 - 4 int
...
Рейтинг: 0 / 0
Массив Int в байты.
    #38642113
Фотография Маслов Андрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Маслов АндрейМаслов Андрейпропущено...

Не очень, у вас получается 32 * 4 = 128 байт информации, или последовательность из 0 и 1 длиной в 1024 бита.
При условие, что тип int равен 4 байтам.

Или вы храните в int число вида:
10101010 - 1 int
10101110 - 2 int
11101010 - 3 int
10101011 - 4 int

Вот тут
...
Рейтинг: 0 / 0
Массив Int в байты.
    #38642115
Фотография Маслов Андрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Маслов АндрейМаслов Андрейпропущено...


Или вы храните в int число вида:
10101010 - 1 int
10101110 - 2 int
11101010 - 3 int
10101011 - 4 int

Почему-то ссылка не вставилась
Вот тут
...
Рейтинг: 0 / 0
Массив Int в байты.
    #38642118
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GorloPavelМассив из 32 элементов
каждый элемент массива хранит целое 0 или 1 ?
...
Рейтинг: 0 / 0
Массив Int в байты.
    #38642126
GorloPavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Маслов АндрейGorloPavelИтого получается 4 байта закодированные в int[32]. Надеюсь понятно объяснил :)
Не очень, у вас получается 32 * 4 = 128 байт информации, или последовательность из 0 и 1 длиной в 1024 бита.
При условие, что тип int равен 4 байтам.
Неужели я непонятно объяснил? :)

Dima TGorloPavelЗдравствуйте. Есть массив int[32] из последовательности чисел 10101001... .

Код: plaintext
1.
2.
3.
4.
5.
int[32] a;
a[31] = 1;
a[30] = 0;
a[29] = 1;
...


так ?
Да. Именно.
...
Рейтинг: 0 / 0
Массив Int в байты.
    #38642133
Фотография Маслов Андрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot GorloPavel]Маслов Андрейпропущено...

Не очень, у вас получается 32 * 4 = 128 байт информации, или последовательность из 0 и 1 длиной в 1024 бита.
При условие, что тип int равен 4 байтам.
Неужели я непонятно объяснил? :)

Теперь понятно, вопрос лишь в том, зачем так было сделано?
...
Рейтинг: 0 / 0
Массив Int в байты.
    #38642139
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GorloPavelДа. Именно.
тогда
Код: plaintext
1.
byte[0] = a[7]*128 + a[6]*64 + a[5]*32 + a[4]*16 + a[3]*8 + a[2]*4 + a[1]*2 + a[0];


остальное по аналогии допиши
...
Рейтинг: 0 / 0
Массив Int в байты.
    #38642143
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TGorloPavelДа. Именно.
тогда
Код: plaintext
1.
byte[0] = a[7]*128 + a[6]*64 + a[5]*32 + a[4]*16 + a[3]*8 + a[2]*4 + a[1]*2 + a[0];


остальное по аналогии допиши

the best!
...
Рейтинг: 0 / 0
Массив Int в байты.
    #38642144
GorloPavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Маслов Андрей]GorloPavelпропущено...

Неужели я непонятно объяснил? :)

Теперь понятно, вопрос лишь в том, зачем так было сделано?

Прием сигнала на IR приемник по протоколу NEC где 0 и 1 закодированы диапазоном времени между сигналами. Есть сигнал определенное время - есть питание на ноге МК... Ну и соответственно наоборот.
...
Рейтинг: 0 / 0
Массив Int в байты.
    #38642154
Фотография Маслов Андрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot GorloPavel]Маслов Андрейпропущено...


Прием сигнала на IR приемник по протоколу NEC где 0 и 1 закодированы диапазоном времени между сигналами. Есть сигнал определенное время - есть питание на ноге МК... Ну и соответственно наоборот.

Так лучше, если только с порядком не напутал

Код: plaintext
1.
2.
3.
4.
   int valRes = 0;
      for ( int i = 0; i < 32; i++ )
         if ( val[i] )
            valRes |=  ( 1 << i );
...
Рейтинг: 0 / 0
Массив Int в байты.
    #38642327
smald
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot GorloPavel]Маслов Андрейпропущено...


Прием сигнала на IR приемник по протоколу NEC где 0 и 1 закодированы диапазоном времени между сигналами. Есть сигнал определенное время - есть питание на ноге МК... Ну и соответственно наоборот.

Уверены, что Вам не на битовые массивы на такой задачке? Например, массив из unsigned long, каждый бит
в элементах которого обозначает отутсвие/наличие сигнала, для момента времени. Первый бит первого элемента-первый момент
времени с начала отсчёта, и далее по порядку. Из значений битов можно для
анализа после формировать uint8_t, int или char-ASCII символа единицы-0x31, нуля- 0x30.
...
Рейтинг: 0 / 0
Массив Int в байты.
    #38646583
RubinDm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так лучше, если только с порядком не напутал
Код: plaintext
1.
2.
3.
4.
int valRes = 0;
      for ( int i = 0; i < 32; i++ )
         if ( val[i] )
            valRes |=  ( 1 << i );

i++ можно смело заменить на ++i, т.к. пост-инкремент тут объективно не нужен, а пре-инкремент дешевле.
проверка if ( val[i] ) тож не нужна, ибо ресурс на проверку расходуется на каждой итерации безусловно, а сам код под условием не стоит почти ничего. итого:
Код: plaintext
1.
2.
3.
int result = 0;
for(int shift = 0; shift < 32; ++shift)
  result |= (1 << shift); // это почти бесплатно
...
Рейтинг: 0 / 0
Массив Int в байты.
    #38646612
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет. Про Endianness уже говорили?
...
Рейтинг: 0 / 0
Массив Int в байты.
    #38646624
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПро Endianness уже говорили?
ага
GorloPavel Есть массив int[32] из последовательности чисел 10101001...Dima T
Код: plaintext
1.
2.
3.
4.
5.
int[32] a;
a[31] = 1;
a[30] = 0;
a[29] = 1;
...


так ?
Да. Именно.
...
Рейтинг: 0 / 0
Массив Int в байты.
    #38648292
GorloPavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RubinDmТак лучше, если только с порядком не напутал
Код: plaintext
1.
2.
3.
4.
int valRes = 0;
      for ( int i = 0; i < 32; i++ )
         if ( val[i] )
            valRes |=  ( 1 << i );

i++ можно смело заменить на ++i, т.к. пост-инкремент тут объективно не нужен, а пре-инкремент дешевле.
проверка if ( val[i] ) тож не нужна, ибо ресурс на проверку расходуется на каждой итерации безусловно, а сам код под условием не стоит почти ничего. итого:
Код: plaintext
1.
2.
3.
int result = 0;
for(int shift = 0; shift < 32; ++shift)
  result |= (1 << shift); // это почти бесплатно



ок. где я тут должен подставить свой массив? Тут?
Код: plaintext
1.
2.
3.
int result = 0;
for(int shift = 0; shift < 32; ++shift)
  result |= (1 << mass[shift]); // это почти бесплатно
...
Рейтинг: 0 / 0
Массив Int в байты.
    #38648303
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GorloPavelок. где я тут должен подставить свой массив? Тут?

скорее всего не дописал автор
Код: plaintext
1.
2.
3.
int result = 0;
for(int shift = 0; shift < 32; ++shift)
     result |= (mass[shift] << shift); // это почти бесплатно


только этот код не будет работать если в mass[shift] окажется значение не из набора 0,1.
...
Рейтинг: 0 / 0
Массив Int в байты.
    #38652784
Фотография Маслов Андрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RubinDmТак лучше, если только с порядком не напутал
Код: plaintext
1.
2.
3.
4.
int valRes = 0;
      for ( int i = 0; i < 32; i++ )
         if ( val[i] )
            valRes |=  ( 1 << i );

i++ можно смело заменить на ++i, т.к. пост-инкремент тут объективно не нужен, а пре-инкремент дешевле.
проверка if ( val[i] ) тож не нужна, ибо ресурс на проверку расходуется на каждой итерации безусловно, а сам код под условием не стоит почти ничего. итого:
Код: plaintext
1.
2.
3.
int result = 0;
for(int shift = 0; shift < 32; ++shift)
  result |= (1 << shift); // это почти бесплатно


Не совсем понял, почему вы убрали проверку if ( val[i] ), так как без неё нарушается логика?!
...
Рейтинг: 0 / 0
Массив Int в байты.
    #38652788
Фотография Маслов Андрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Маслов АндрейRubinDmпропущено...
i++ можно смело заменить на ++i, т.к. пост-инкремент тут объективно не нужен, а пре-инкремент дешевле.
проверка if ( val[i] ) тож не нужна, ибо ресурс на проверку расходуется на каждой итерации безусловно, а сам код под условием не стоит почти ничего. итого:
Код: plaintext
1.
2.
3.
int result = 0;
for(int shift = 0; shift < 32; ++shift)
  result |= (1 << shift); // это почти бесплатно


Не совсем понял, почему вы убрали проверку if ( val[i] ), так как без неё нарушается логика?!
Хотя ОК, понял.
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Массив Int в байты.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]