![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
Демидрол |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 7.6.2008 Где: СПб Репутация: нет Всего: нет |
Доброго времени суток.У меня такой вопрос:
Имеется код
Но в buf может быть все что угодно ![]() Сложность состоит в том,что использование функции наподобие itoa для перевода res в char* и последующего копирования res в конец buf будет неверно,так как в данном примере в buf будет записано "1", а мне надо,чтобы туда был записан двоичный код числа res, а не двоичный код, соответствующий символу "1" в данном примере. Как сделать дозапись res в buf? |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
немного непонятно 4то имеется ввиду...функция возвращяет short. а у тебя char*...
так пойдет?
|
|||
|
||||
Демидрол |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 7.6.2008 Где: СПб Репутация: нет Всего: нет |
ммм!!!!!!Прошу прощения за ошибку,вместо int действительно нужен short.
![]() вариант через массив не пойдет,нужно именно в просто char* ![]() |
|||
|
||||
UniBomb |
|
|||
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: 1 Всего: 97 |
Демидрол, если ты объявиш buf[10], то *buf и будет просто указателем.
|
|||
|
||||
Демидрол |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 7.6.2008 Где: СПб Репутация: нет Всего: нет |
понятно...
buf[1] = *((char*)&res); - это понятно для чего buf[2] = *((char*)(&res + 1)); - а это зачем? ![]() а если buf будет указатель не на массив,а на строку, тогда можно будет сделать такую операцию(дописать в конец)??? Это сообщение отредактировал(а) Демидрол - 6.10.2008, 16:38 |
|||
|
||||
azesmcar |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
а он никогда не был указателем на массив. указатель на тип char - динами4еский массив (который ты кстати в своем примере не создал) массив - стати4еский массив типа char в использовании в данном слу4ае никакой разницы.
buf[1] = *((char*)&res); - берем первый элемент buf[2] = *((char*)(&res + 1)); - берем второй элемент у тебя short - 2 byte -а. я добавил в конец два байта которые вернула функция. |
||||
|
|||||
Демидрол |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 7.6.2008 Где: СПб Репутация: нет Всего: нет |
||||
|
||||
UniBomb |
|
||||
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: 1 Всего: 97 |
Демидрол, вторая строчка нужна потому, чтобы записать второй бойт контрольной суммы (ибо crc 16-ти разрядная).
строка и массив - это почти одно и тоже.
|
||||
|
|||||
Демидрол |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 7.6.2008 Где: СПб Репутация: нет Всего: нет |
||||
|
||||
UniBomb |
|
|||
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: 1 Всего: 97 |
Демидрол, да, только один байт
Это сообщение отредактировал(а) UniBomb - 6.10.2008, 16:55 |
|||
|
||||
Демидрол |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 7.6.2008 Где: СПб Репутация: нет Всего: нет |
если я правильно понимаю, то в *((char*)&res) первая * - это указатель на оставшееся, (char*)&res - приведение к char* собственно &res, а &res - это первый байт res???
![]() |
|||
|
||||
UniBomb |
|
|||
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: 1 Всего: 97 |
res - результат
&res - ссылка на результат (char*)&res - приведение к типу *((char*)&res) - указатель на ячейку памяти с первым байтом результата Это сообщение отредактировал(а) UniBomb - 6.10.2008, 17:01 |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
процесс примерно такой..
у тебя 2 байта short (2 byte) - представляем их как массив (а то4нее указатель) размера 2 из char (1 byte). В результате полу4аем указатель на первый элемент сконвертированного массива, разименовываем - первый элемент полу4ен, записываем в строку. Даль6е, берем второй элемент, для этого прибавляем 1 к указатель (см. арифмети4еские операции с указателями), разименовываем - второй элемент полу4ен..вот и все. |
|||
|
||||
Демидрол |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 7.6.2008 Где: СПб Репутация: нет Всего: нет |
![]() ![]() ![]() ![]() О_оооо вот это да!!!Нив жинь бы не додумался... Спасибо большое за помощь,а отдельное БОЛЬШОЕ-ПРЕБОЛЬШОЕ СПАСИБО за то,что объяснили что к чему!!! |
|||
|
||||
J0ker |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
еще раз о разнице:
char x[] = "test"; означает создание МАССИВА размером strlen("test")+1=5 и иницилизация его элементами {'t','e','s','t',0} char *x = "test"; означает создание УКАЗАТЕЛЯ, котоый инициализируется адресом ЛИТЕРАЛА расположенного в ЗЩИЩЕННОЙ ОТ ЗАПИСИ области памяти. Поэтому при попытке записи например x[2] = 'S'; - вы получите с высокой степенью вероятности run-time error (Segmentation fault/Access violation) Поэтому эти литералы по своей природе КОНСТАНТЫ, и должны объявляться как const char *x = "test"; |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |