Немного похоже на мою предыдущую тему. У меня есть буфер. Code: unsigned char textBuffer[] = { 0x1,0x1,0x1,0x1} Но когда я пытаюсь его перевести в инт, получается 1. Code: cout << "Converted: "<< (int)(*(buff + 3) >> 24 | *(buff + 2) >> 16 | *(buff + 1) >> 8 | *buff) << endl; Я думаю, что должно быть пятнадцать а не единица. Как можно исправить код?
нужно *((int *)addr) где addr - указатель .... берет указатель типа char.... преобразует в его в указатель типа int и берет содержимое. небольшое.... уточнение по твоему коду (у тебя) (int )*addr .... берет адрес .... получает байт .... превращает его в инт. почуствуй разницу
в твоем массиве для 2-х байтов имеем в шестнадцатиричном виде число 101=257 в десятиричной системе для четырех байтов (long) имеем число в шестнадцатирияном виде 1010101 в десятеричной системе 16843009 unsigned char textBuffer[] = { 0x1,0x1,0x1,0x1}; printf("%d",*((int *)textBuffer));
Да, кстати, ТС: >> cout << "Converted: "<< (int)(*(buff + 3) >> 24 | *(buff + 2) >> 16 | *(buff + 1) >> 8 | *buff) << endl; когда ты пишешь (int) перед выражением, то к инту кастуется только непосредственная первая часть выражения. То есть: (type)( ........... ) + рекомендую объединять в скобки части выражения, участвующие в логических битовх операциях ? | ^ То есть писать лучше так (......) | (......) | (......)
Code: 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 } %)
ужас какой-то... вот нынче споры пошли... толи настолько философко-умные, что я не понимаю, толи настолько тупые, что понимать не хочется да и не подходит сюда слово "понимать" ... в стиле "как преобразовать единицу в двойку без прибавления единицы ..." - "вычесть минус один в квадрате ..." *(int*)&intvar = 1*1*1;