Как сохранить байт в 4-байтовом числе без изменения байтов вокруг него? - PullRequest
0 голосов
/ 26 февраля 2011

Итак, если у меня есть 4-байтовое число (скажем, шестнадцатеричное), и я хочу сохранить байт, скажем, DD, в шестнадцатеричном формате, в позиции n-го байта, не меняя другие элементы номера шестнадцатеричного числа, какой самый простой способ это сделать?Я предполагаю, что это какая-то комбинация побитовых операций, но я все еще новичок в них, и до сих пор нашел их довольно запутанными?

Ответы [ 2 ]

4 голосов
/ 26 февраля 2011
byte n = 0xDD;
uint i = 0x12345678;
i = (i & ~0x0000FF00) | ((uint)n << 8);

Редактировать: Забыл упомянуть, будьте осторожны, если вы делаете это с подписанными типами данных, чтобы не произошло непреднамеренное расширение знака.

1 голос
/ 27 февраля 2011

Ответ Мерадада показывает, как это сделать с помощью битовых манипуляций. Вы также можете использовать старый трюк с байтовым массивом (при условии, что C или другой язык допускает эту глупость):

byte n = 0xDD;
uint i = 0x12345678;
byte *b = (byte*)&i;
b[1] = n;

Конечно, это специфично для процессора, так как у машин с прямым порядком байтов байты обращены к младшему. Кроме того, этот метод ограничивает вас работой над точными байтовыми границами, тогда как битовая манипуляция позволит вам модифицировать любые заданные 8 битов. То есть, возможно, вы захотите превратить 0x12345678 в 0x12345DD8, что не подходит для техники, которую я показываю.

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