Как значения изменяются при приведении типа с беззнакового короткого на беззнаковое целое - PullRequest
0 голосов
/ 03 февраля 2011

* pSelectData = 4A, * (pSelectData + 1) = 54

значение без знака int = ((без знака short ) pSelectData);

Выход = 21578 (в шестнадцатеричном виде 0x544A).

Может кто-нибудь объяснить мне, как это происходит (как преобразовываются значения) ??

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 09 сентября 2011

Это ваша память, где p = pSelectedData, ps = приведение к короткому, pint = приведение к int (предполагается архитектура с прямым порядком байтов):

[  ][4A][54][00][00][  ]
    ^   ^   ^   ^   ^
    p   p+1 p+2 p+3 p+4
    ps      ps+1    ps+2
    pint            pint+1

Вы, вероятно, хотели сделать это:

*(unsigned short*)pSelectedData = 0x4a;
*(unsigned short*)(pSelectedData+1) = 0x54;

что даст вам

[  ][4A][00][54][00][  ]
0 голосов
/ 03 февраля 2011

В чем проблема конкретнее?

В зависимости от порядка байтов вы получаете либо 0x4a54, либо 0x544a. Это именно то представление о вашей ценности, которое лежит в памяти.

...