Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   как перевести байты в int (https://forum.antichat.xyz/showthread.php?t=63512)

байкал 05.03.2008 21:41

как перевести байты в int
 
Немного похоже на мою предыдущую тему.
У меня есть буфер.

Код:

        unsigned char textBuffer[] = { 0x1,0x1,0x1,0x1}
Но когда я пытаюсь его перевести в инт, получается 1.
Код:

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

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

Delimiter 05.03.2008 22:57

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

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

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

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

_Great_ 05.03.2008 23:22

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

это еще почему

Delimiter 05.03.2008 23:25

он хотел сказать 257 :D

байкал 06.03.2008 01:03

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

Delimiter 06.03.2008 01:05

что я имел то я и ввел :D :p :)

байкал 06.03.2008 01:09

Цитата:

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

это еще почему

Я перепутал с 1111

Delimiter 06.03.2008 01:17

в твоем массиве
для 2-х байтов имеем в шестнадцатиричном виде число 101=257 в десятиричной системе

для четырех байтов (long) имеем число в шестнадцатирияном виде 1010101 в десятеричной системе 16843009

unsigned char textBuffer[] = { 0x1,0x1,0x1,0x1};

printf("%d",*((int *)textBuffer));

_Great_ 06.03.2008 09:02

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

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

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

x0man 06.03.2008 09:38

Код:

        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
        }

%)


Время: 19:34