Разыменование внутри буфера - PullRequest
2 голосов
/ 06 июня 2010

Допустим, у меня был указатель на символ, указывающий на буфер, который содержал эти значения (в шестнадцатеричном формате):

12 34 56 78 00 00 80 00

Я хочу изменить последние два байта до значения short, равного 42. Поэтому я думаю, что мне придется сделать что-то вроде этого:

(short)*(pointer+6)=42;

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

1 Ответ

5 голосов
/ 06 июня 2010

Приведение к «короткому» происходит после назначения. То, что вы хотите:

*(short*)(pointer+6) = 42;

Кстати, остерегайтесь проблем с псевдонимами. В этом случае вы, вероятно, в порядке, поскольку предполагается, что символы могут иметь псевдонимы (правка: я исправлен; этот пример нарушает строгое псевдонимы, если фактический тип этих данных не является «коротким»). Но в целом вы должны быть очень осторожны в случаях, когда вы приводите один тип указателя к другому. Google "строгий псевдоним" для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...