![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
relok |
|
|||
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 13.11.2010 Репутация: нет Всего: нет |
есть большое число (999999999 к примеру)
можно ли его двоичное представление красиво записать в char массив? то есть к примеру число 4059099376 (bin=11110001 11110000 11110000 11110000) записать в char msg[4] ? msg[0] будет равно соответственно 11110001 и так далее информатикой не занимался, => на ум приходит только брать первый байт, переводить в десятичное и его кидать в msg[0], и так далее Это сообщение отредактировал(а) relok - 28.11.2010, 18:00 |
|||
|
||||
WhKitten |
|
|||
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 24.11.2010 Репутация: нет Всего: нет |
Если я правильно понял задачу:
Это сообщение отредактировал(а) WhKitten - 28.11.2010, 18:13 |
|||
|
||||
relok |
|
|||
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 13.11.2010 Репутация: нет Всего: нет |
мне как новичку нифига не понятно)
сделал так: tmp[32] - массив из нулей и единиц, который нужно разбить на 4 байта на выходе - ch[4] , 4 числа от 0 до 255 for(i=0;i<4;i++) { ch[i]=0; k=128; for(j=0+i*8;j<8+i*8;j++) { ch[i]+=tmp[j]*k; k=k/2; } } |
|||
|
||||
WhKitten |
|
|||
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 24.11.2010 Репутация: нет Всего: нет |
Мой пример запишет в массив s, числа: 241 240 240 240. Собственно 241 и есть 11110001, а 240 есть 11110000.
Функция le, нужна, чтобы убедится, что первыми идут младшие байты числа в памяти. |
|||
|
||||
relok |
|
|||
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 13.11.2010 Репутация: нет Всего: нет |
а что значит unsigned char *p = reinterpret_cast<unsigned char *>(&n);?
а именно reinterpret_cast |
|||
|
||||
WhKitten |
|
|||
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 24.11.2010 Репутация: нет Всего: нет |
Преобразует один тип указателя к другому без каких либо проверок. Т.е &n это указатель на unsigned int, берём тот же адрес (тот же указатель), но теперь считаем, что он указывает на unsigned char и присваиваем его p. А далее цикл. Если int 32-х битный, sizeof(n) вернёт 4, и мы запишем 4 байта в массив char'ов.
*p++, сначал берёт значение char по указателю, а затем увеличивает его на размер типа, на который указывает указатель, т.е на sizeof(char)==1. Это сообщение отредактировал(а) WhKitten - 28.11.2010, 18:42 |
|||
|
||||
Леопольд |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 3 Всего: 13 |
-------------------- вопросов больше чем ответов |
|||
|
||||
WhKitten |
|
|||
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 24.11.2010 Репутация: нет Всего: нет |
||||
|
||||
Леопольд |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 3 Всего: 13 |
WhKitten, э... и что, сложно сделать std::reverse, или просто пройти в оbратном порядке? Я просто показал что не оbязательно по bайтику каждое число переbирать... А когда у него bудет другой результат на другой платформе, он узнает что есть little endian и big endian.
Это сообщение отредактировал(а) Леопольд - 28.11.2010, 22:10 -------------------- вопросов больше чем ответов |
|||
|
||||
cardinal |
|
||||||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: нет Всего: 99 |
Ниодного "красиво" я пока в теме не увидел, а точнее просто ужаснулся что тут увидел...
Вот псевдокод (допишите сам):
-------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
||||||
|
|||||||
cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: нет Всего: 99 |
-------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
Леопольд |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 3 Всего: 13 |
cardinal, это слишком переносимый вариант. Теперь человек не почувствует "на сеbе" разницу в порядке bайт.
![]() Это сообщение отредактировал(а) Леопольд - 28.11.2010, 22:54 -------------------- вопросов больше чем ответов |
|||
|
||||
sQu1rr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 597 Регистрация: 11.11.2008 Где: london Репутация: 3 Всего: 13 |
||||
|
||||
mrbrooks |
|
||||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 19 Всего: 306 |
а как же memcpy?
Добавлено через 4 минуты и 27 секунд ха. кстати пришла такая мысля:
Добавлено через 5 минут и 30 секунд хотя Леопольд был раньше. лол. |
||||
|
|||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
||||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |