Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|
как перевести байты в int |

05.03.2008, 21:41
|
|
Новичок
Регистрация: 01.08.2007
Сообщений: 24
Провел на форуме: 48533
Репутация:
1
|
|
как перевести байты в int
Немного похоже на мою предыдущую тему.
У меня есть буфер.
Код:
unsigned char textBuffer[] = { 0x1,0x1,0x1,0x1}
Но когда я пытаюсь его перевести в инт, получается 1.
Код:
cout << "Converted: "<< (int)(*(buff + 3) >> 24 | *(buff + 2) >> 16 | *(buff + 1) >> 8 | *buff) << endl;
Я думаю, что должно быть пятнадцать а не единица. Как можно исправить код?
Последний раз редактировалось байкал; 05.03.2008 в 22:29..
|
|
|

05.03.2008, 22:57
|
|
Banned
Регистрация: 08.04.2005
Сообщений: 446
Провел на форуме: 2187381
Репутация:
518
|
|
нужно
*((int *)addr)
где addr - указатель
.... берет указатель типа char.... преобразует в его в указатель типа int и берет содержимое.
небольшое.... уточнение по твоему коду (у тебя)
(int )*addr
.... берет адрес .... получает байт .... превращает его в инт.
почуствуй разницу 
Последний раз редактировалось Delimiter; 05.03.2008 в 23:31..
|
|
|

05.03.2008, 23:22
|
|
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме: 5339610
Репутация:
4360
|
|
>Я думаю, что должно быть пятнадцать а не единица. Как можно исправить код?
это еще почему
|
|
|

05.03.2008, 23:25
|
|
Banned
Регистрация: 08.04.2005
Сообщений: 446
Провел на форуме: 2187381
Репутация:
518
|
|
он хотел сказать 257 
|
|
|

06.03.2008, 01:03
|
|
Новичок
Регистрация: 01.08.2007
Сообщений: 24
Провел на форуме: 48533
Репутация:
1
|
|
Кстати, Delimiter, может ты имел ввиду (int)(*buff)? Всё равно единица получается.
|
|
|

06.03.2008, 01:05
|
|
Banned
Регистрация: 08.04.2005
Сообщений: 446
Провел на форуме: 2187381
Репутация:
518
|
|
|
|
|

06.03.2008, 01:09
|
|
Новичок
Регистрация: 01.08.2007
Сообщений: 24
Провел на форуме: 48533
Репутация:
1
|
|
Сообщение от _Great_
>Я думаю, что должно быть пятнадцать а не единица. Как можно исправить код?
это еще почему
Я перепутал с 1111
|
|
|

06.03.2008, 01:17
|
|
Banned
Регистрация: 08.04.2005
Сообщений: 446
Провел на форуме: 2187381
Репутация:
518
|
|
в твоем массиве
для 2-х байтов имеем в шестнадцатиричном виде число 101=257 в десятиричной системе
для четырех байтов (long) имеем число в шестнадцатирияном виде 1010101 в десятеричной системе 16843009
unsigned char textBuffer[] = { 0x1,0x1,0x1,0x1};
printf("%d",*((int *)textBuffer));
Последний раз редактировалось Delimiter; 06.03.2008 в 01:21..
|
|
|

06.03.2008, 09:02
|
|
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме: 5339610
Репутация:
4360
|
|
Да, кстати, ТС:
>> cout << "Converted: "<< (int)(*(buff + 3) >> 24 | *(buff + 2) >> 16 | *(buff + 1) >> 8 | *buff) << endl;
когда ты пишешь (int) перед выражением, то к инту кастуется только непосредственная первая часть выражения.
То есть: (type)( ........... )
+ рекомендую объединять в скобки части выражения, участвующие в логических битовх операциях ? | ^
То есть писать лучше так (......) | (......) | (......)
|
|
|

06.03.2008, 09:38
|
|
Познающий
Регистрация: 24.02.2006
Сообщений: 34
Провел на форуме: 136883
Репутация:
50
|
|
Код:
char buff[] = {0, 1, 2, 3};
int buff_dword;
__asm
{
push eax
mov eax, dword ptr [buff]
xchg al, ah
rol eax, 16
xchg al, ah
mov buff_dword, eax
pop eax
}
%)
Последний раз редактировалось x0man; 06.03.2008 в 09:51..
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|