Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Два char в один short 
V
    Опции темы
mrbrooks
Дата 9.11.2007, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 2
Всего: 306



Народ! Помогите! Туплю. Как два char переобразовать в short. 

Приходит ко мне 
первый char a = 7;
второй char b = 154;

я делаю так:

short c = (a<<8) + b; 

Я прав или накосячил?

Это сообщение отредактировал(а) mrbrooks - 9.11.2007, 15:26
PM MAIL   Вверх
EnergoHokum
Дата 9.11.2007, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 600
Регистрация: 10.11.2006
Где: Россия, Ставропол ь

Репутация: нет
Всего: 6



Что именно ты с ними хочешь сделать? 
Код

memcpy(&a+sizeof(char),&b,sizeof(char));//Это?



Это сообщение отредактировал(а) EnergoHokum - 9.11.2007, 15:35
PM MAIL ICQ   Вверх
Fazil6
Дата 9.11.2007, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



Цитата(mrbrooks @  9.11.2007,  15:23 Найти цитируемый пост)
Я прав или накосячил?

ну если не считать, что судя по всему все должно быть unsigned
PM MAIL   Вверх
MAKCim
Дата 9.11.2007, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата(mrbrooks @  9.11.2007,  15:23 Найти цитируемый пост)
Я прав или накосячил?

лучше так
Код

((unsigned short)a << 8) | b;



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
mrbrooks
Дата 9.11.2007, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 2
Всего: 306



EnergoHokum
Не - я получаю два char как один short. И мне нужно обратно теперь эти char в один short преобразовать.

Это сообщение отредактировал(а) mrbrooks - 9.11.2007, 15:37
PM MAIL   Вверх
Sartorius
Дата 9.11.2007, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: 8
Всего: 37



советую сразу делать анонимное объединение
Код

union {
 struct {
  char a, b;
 };
  short c;
};


 Содержимое чаров зависит от того биг или литл эндиан архитектура у вас.
PM MAIL ICQ   Вверх
Lazin
Дата 9.11.2007, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



Код

short s = ???;
char hi = 0, lo = 0;

lo = s;
hi = s >> 8;


PM MAIL Skype GTalk   Вверх
mrbrooks
Дата 9.11.2007, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 2
Всего: 306



Цитата(Lazin @ 9.11.2007,  15:41)
Код

short s = ???;
char hi = 0, lo = 0;

lo = s;
hi = s >> 8;

дык мне же short и не известен. потому и спрашиваю   smile 
PM MAIL   Вверх
EnergoHokum
Дата 9.11.2007, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 600
Регистрация: 10.11.2006
Где: Россия, Ставропол ь

Репутация: нет
Всего: 6



Т. е. у тебя short разбивается как-то на два char-а, и тебе их нужно обратно в short склеить?
PM MAIL ICQ   Вверх
mrbrooks
Дата 9.11.2007, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 2
Всего: 306



Цитата(EnergoHokum @ 9.11.2007,  15:48)
Т. е. у тебя short разбивается как-то на два char-а, и тебе их нужно обратно в short склеить?

Точно комрад. Извините если не очень четко поставил вопрос. Просто запарился.
PM MAIL   Вверх
EnergoHokum
Дата 9.11.2007, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 600
Регистрация: 10.11.2006
Где: Россия, Ставропол ь

Репутация: нет
Всего: 6



В том коде, что я написал, ошибка была, нужно так:
Код

char a; char b; short c;
c=(short)b;//предполагаем, что b - "нижняя" половинка
memcpy(&c+sizeof(char),&a,sizeof(char));

ВотЪ. А можно и так:
Код

char a; char b; short c;
c=(short)b; c+=(short)(a<<8);//за правильность не уверен, первый вариант кажется надёжней


Это сообщение отредактировал(а) EnergoHokum - 9.11.2007, 16:00
PM MAIL ICQ   Вверх
Lazin
Дата 9.11.2007, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



из char в short - вот-так
Код

short s = ((unsigned short)a << 8) | b;

обратно - так
Код

char a = 0,  b = 0;
b = s;
a = s >> 8;

Цитата(EnergoHokum @  9.11.2007,  15:59 Найти цитируемый пост)
memcpy(&c+sizeof(char),&a,sizeof(char));

создатели стандартной библиотеки вряд-ли догадывались что memcpy для этого использовать будут 

PM MAIL Skype GTalk   Вверх
mrbrooks
Дата 9.11.2007, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 2
Всего: 306



EnergoHokum Что не то все равно получается. Но куда копать - ясно.  спасибо. но вопрос пока не решен...  smile  

Это сообщение отредактировал(а) mrbrooks - 9.11.2007, 16:41
PM MAIL   Вверх
mrbrooks
Дата 9.11.2007, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 2
Всего: 306



Все получилось вот с таким результатом. Всем спасибо.

Код


((unsigned short)((a << 8) +b);


PM MAIL   Вверх
Alek86
Дата 10.11.2007, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



странно. мне казалось, в интел архитектуре, в слове байты хранятся сначала второй, а потом первый


--------------------
user posted image    user posted image
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0923 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.