IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

 
 Ответить  Открыть новую тему 
> Последний байт, С++ Builder
18192123
сообщение 20.03.2009 21:37
Сообщение #1


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Скажите пожалуйста, как выделить последний байт (старший, левый) из числа типа int в переменную типа char?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 20.03.2009 22:23
Сообщение #2


Гость






	char myCh = (((unsigned int)temp) >> 24) & 0xFF;
(в принципе, можно было бы и не приводить к unsigned int, но я всегда привожу к беззнаковому типу, во избежание проблем при сдвигах). Еще лучше - не привязываться к 24, а сделать (sizeof(unsigned int) - 1) * 8 вместо этого.
 К началу страницы 
+ Ответить 
Archon
сообщение 22.03.2009 13:36
Сообщение #3


Профи
****

Группа: Пользователи
Сообщений: 618
Пол: Мужской

Репутация: -  24  +


А можно ввести union:
union Int2Bytes
{
int Int;
char Bytes[4];
};
Тогда можно сделать так:
	Int2Bytes b;
b.Int = temp;
и обращаться к байтам как к b.Bytes[0] (младший), b.Bytes[1] (второй) и так далее.

Сообщение отредактировано: Archon - 22.03.2009 13:46


--------------------
Close the World...txeN eht nepO
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 22.03.2009 15:07
Сообщение #4


Гость






Не плоди лишние сущности. Зачем тебе именованный union, если можно сделать анонимный (хотя я бы с union-ами вообще не стал заморачиваться. Конструктор/Деструктор и все сопутствующие этому издержки), и избавиться от "b."?
 К началу страницы 
+ Ответить 
Archon
сообщение 22.03.2009 16:27
Сообщение #5


Профи
****

Группа: Пользователи
Сообщений: 618
Пол: Мужской

Репутация: -  24  +


А можно поподробнее? Я думал, у union нет конструктора.

Добавлено через 7 мин.
PS Анонимные объединения, имхо, путаницу вызывают, хотя, кому как нравится.


--------------------
Close the World...txeN eht nepO
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 22.03.2009 18:52
Сообщение #6


Гость






Цитата
Я думал, у union нет конструктора.
Что значит "нет"? Union - это полноправный class:
Цитата(С++ Standard)
9. Classes
... 4. ... A union is a class defined with the class-key union;
+
Цитата(C++ Standard)
12.1 Constructors
... 5. A default constructor for a class X is a constructor of class X that can be called without an argument. If
there is no user-declared constructor for class X, a default constructor is implicitly declared.
 К началу страницы 
+ Ответить 
Archon
сообщение 23.03.2009 5:55
Сообщение #7


Профи
****

Группа: Пользователи
Сообщений: 618
Пол: Мужской

Репутация: -  24  +


И правда. Спасибо, volvo.


--------------------
Close the World...txeN eht nepO
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 28.07.2025 4:38
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"