C # целочисленное маскирование в массив байтов - PullRequest
2 голосов
/ 04 ноября 2010

Я не совсем понимаю, почему это не работает, может кто-нибудь предоставить какую-то информацию?

У меня есть функция, которая принимает целочисленное значение, но хотела бы сохранить два старших биташестнадцатеричного значения в элемент байтового массива.

Скажем, если Расстояние равно (24 135) 10 или (5E47) 16

public ConfigureReportOptionsMessageData(int Distance, int DistanceCheckTime)
    {
        ...
        this._data = new byte[9];
        this._data[0] = (byte)(Distance & 0x00FF); // shows 47
        this._data[1] = (byte)(Distance & 0xFF00); // shows 00
        this._data[2] = (byte)(DistanceCheckTime & 0xFF);
        ...
    }

Ответы [ 3 ]

2 голосов
/ 04 ноября 2010
this._data[1] = (byte)(Distance >> 8);

?

2 голосов
/ 04 ноября 2010

Похоже, вы должны использовать BitConverter.GetBytes - это обеспечит гораздо более простой вариант.

1 голос
/ 04 ноября 2010

Причина, по которой вы получаете 0 для _data[1], заключается в том, что старшие 3 байта теряются при преобразовании в byte.

Ваш промежуточный результат выглядит так:

Distance && 0xff00 = 0x00005e00;

Когда это преобразуется в байт, вы сохраняете только младший байт:

(byte)0x00005e00 = 0x00;

Вам нужно сдвинуть на 8 бит:

0x00005e00 >> 8 = 0x0000005e;

перед тем, как привести к byte и присвоить _data[1]

...