Форум программистов «Весельчак У»
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
Начало
Наши сайты
Галерея
Весельчак У
Наша Вики
Хранилище
Проекты
Правила
Правила форума
Правила русского языка
Помощь
Поиск
Календарь
Почта
Войти
Регистрация
Форум программистов «Весельчак У»
>
Программирование
>
C/C++
>
Borland C/C++
(Модераторы:
nikedeforest
,
Вад
) > Тема:
Преобразование байтов в числа
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Преобразование байтов в числа (Прочитано 13978 раз)
0 Пользователей и 1 Гость смотрят эту тему.
FanatWin
Участник
Offline
Преобразование байтов в числа
«
:
03-06-2009 02:34 »
Как преобразовать четыре байта в 32-битовое целое число со знаком средствами «Borland C++Builder 6»
Помогите, пожалуйста, новичку…
Записан
Играю и программирую игры, на - rpgplays.ru
RXL
Технический
Администратор
Offline
Пол:
Re: Преобразование байтов в числа
«
Ответ #1 :
03-06-2009 03:27 »
FanatWin
, что это за байты?
Записан
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Антон (LogRus)
Глобальный модератор
Offline
Пол:
Внимание! Люблю сахар в кубиках!
Re: Преобразование байтов в числа
«
Ответ #2 :
03-06-2009 05:20 »
Код:
char raw_data[] = {0x34, 0xA4, 0xB4, 0xC4 };
long result = *reinterpret_cast<long *>(raw_data);
Записан
Странно всё это....
Вад
Модератор
Offline
Пол:
Re: Преобразование байтов в числа
«
Ответ #3 :
03-06-2009 07:54 »
Я бы, честно говоря, предпочёл старый добрый memcpy или его заменители. Потому что reinterpret_cast ненадёжен, да и любой _cast может привести к проблемам, если будут какие-нибудь кренделя с выравниванием памяти.
Код:
long result;
char raw_data[] = {0x34, 0xA4, 0xB4, 0xC4 };
memcpy(&result, raw_data, sizeof(result));
Записан
FanatWin
Участник
Offline
Re: Преобразование байтов в числа
«
Ответ #4 :
03-06-2009 09:37 »
Цитата: RXL от 03-06-2009 03:27
FanatWin
, что это за байты?
Извиняюсь, что конкретней не указал, что мне надо.
Вообще, надо написать функцию, являющеюся аналогом «BitConverter.ToInt32» (Visual Studio NET но на C++) то есть: возвратить 32-битовое целое число со знаком, преобразованное из четырех байтов с указанной позицией в массив байтов….
А как это сделать я слабо представляю, точнее не представляю вообще…
Записан
Играю и программирую игры, на - rpgplays.ru
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
Re: Преобразование байтов в числа
«
Ответ #5 :
03-06-2009 09:48 »
FanatWin сделай так
Код:
#pragma pack(push,1)
union u_myDWORD
{
struct
{
BYTE m_by0;
BYTE m_by1;
BYTE m_by2;
BYTE m_by3;
};
DWORD m_dwd;
u_myDWORD()
{
m_dwd=0;
}
};
#pragma pack(pop)
u_myDWORD d;
d.m_by0=...;
d.m_by1=...;
d.m_by2=...;
d.m_by3=...;
или так
Код:
DWORD dwd=0;
*(0+(BYTE*)&dwd)=...; //0-й байт
*(1+(BYTE*)&dwd)=...; //1-й байт
*(2+(BYTE*)&dwd)=...; //2-й байт
*(3+(BYTE*)&dwd)=...; //3-й байт
Записан
>FAQ ПО ПРОГР.
>ССЫЛКИ ПО ПРОГР.
>Правила"Неотложки"
Антон (LogRus)
Глобальный модератор
Offline
Пол:
Внимание! Люблю сахар в кубиках!
Re: Преобразование байтов в числа
«
Ответ #6 :
03-06-2009 12:36 »
Цитата: Вад от 03-06-2009 07:54
Я бы, честно говоря, предпочёл старый добрый memcpy или его заменители. Потому что reinterpret_cast ненадёжен, да и любой _cast может привести к проблемам, если будут какие-нибудь кренделя с выравниванием памяти.
может быть
тогда так:
Код:
long Raw2long(const char * data)
{
long result = 0;
std::copy(data, data + sizeof(long), reinterpret_cast<char *>(&result));
return 0;
}
тут не может быть проблем с выравниванием, т.к. long приводится к char, а не наоборот
кроме того внутри это преобразуется memcpy
Записан
Странно всё это....
FanatWin
Участник
Offline
Re: Преобразование байтов в числа
«
Ответ #7 :
04-06-2009 02:18 »
Всем:
Огромное спасибо, вы мне очень помогли...
Записан
Играю и программирую игры, на - rpgplays.ru
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Форум программистов «Весельчак У»
>
Программирование
>
C/C++
>
Borland C/C++
(Модераторы:
nikedeforest
,
Вад
) > Тема:
Преобразование байтов в числа
Загружается...