ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

как перевести байты в int
  #1  
Старый 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..
 
Ответить с цитированием

  #2  
Старый 05.03.2008, 22:57
Delimiter
Banned
Регистрация: 08.04.2005
Сообщений: 446
Провел на форуме:
2187381

Репутация: 518
По умолчанию

нужно
*((int *)addr)
где addr - указатель
.... берет указатель типа char.... преобразует в его в указатель типа int и берет содержимое.

небольшое.... уточнение по твоему коду (у тебя)
(int )*addr

.... берет адрес .... получает байт .... превращает его в инт.

почуствуй разницу

Последний раз редактировалось Delimiter; 05.03.2008 в 23:31..
 
Ответить с цитированием

  #3  
Старый 05.03.2008, 23:22
_Great_
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме:
5339610

Репутация: 4360


Отправить сообщение для _Great_ с помощью ICQ
По умолчанию

>Я думаю, что должно быть пятнадцать а не единица. Как можно исправить код?

это еще почему
 
Ответить с цитированием

  #4  
Старый 05.03.2008, 23:25
Delimiter
Banned
Регистрация: 08.04.2005
Сообщений: 446
Провел на форуме:
2187381

Репутация: 518
По умолчанию

он хотел сказать 257
 
Ответить с цитированием

  #5  
Старый 06.03.2008, 01:03
байкал
Новичок
Регистрация: 01.08.2007
Сообщений: 24
Провел на форуме:
48533

Репутация: 1
По умолчанию

Кстати, Delimiter, может ты имел ввиду (int)(*buff)? Всё равно единица получается.
 
Ответить с цитированием

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

Репутация: 518
По умолчанию

что я имел то я и ввел
 
Ответить с цитированием

  #7  
Старый 06.03.2008, 01:09
байкал
Новичок
Регистрация: 01.08.2007
Сообщений: 24
Провел на форуме:
48533

Репутация: 1
По умолчанию

Цитата:
Сообщение от _Great_  
>Я думаю, что должно быть пятнадцать а не единица. Как можно исправить код?

это еще почему
Я перепутал с 1111
 
Ответить с цитированием

  #8  
Старый 06.03.2008, 01:17
Delimiter
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..
 
Ответить с цитированием

  #9  
Старый 06.03.2008, 09:02
_Great_
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме:
5339610

Репутация: 4360


Отправить сообщение для _Great_ с помощью ICQ
По умолчанию

Да, кстати, ТС:

>> cout << "Converted: "<< (int)(*(buff + 3) >> 24 | *(buff + 2) >> 16 | *(buff + 1) >> 8 | *buff) << endl;

когда ты пишешь (int) перед выражением, то к инту кастуется только непосредственная первая часть выражения.
То есть: (type)( ........... )
+ рекомендую объединять в скобки части выражения, участвующие в логических битовх операциях ? | ^
То есть писать лучше так (......) | (......) | (......)
 
Ответить с цитированием

  #10  
Старый 06.03.2008, 09:38
x0man
Познающий
Регистрация: 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..
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Баг в ИЕ (отображение html в изображениях). Как юзать. censored! Авторские статьи 54 21.08.2009 06:42
Внедрение Sql кода с завязанными глазами k00p3r Чужие Статьи 0 12.06.2005 20:48
SQL Injection для чайников, взлом ASP+MSSQL k00p3r Чужие Статьи 0 12.06.2005 12:42



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ