Играя с байтами ... нужно конвертировать из Java в C # - PullRequest
1 голос
/ 28 апреля 2010

Я не привык манипулировать байтами в моем коде, и у меня есть этот кусок кода, написанный на Java, и мне нужно было бы преобразовать его в его эквивалент C #:

protected static final int putLong(final byte[] b, final int off, final long val) {
    b[off + 7] = (byte) (val >>> 0);
    b[off + 6] = (byte) (val >>> 8);
    b[off + 5] = (byte) (val >>> 16);
    b[off + 4] = (byte) (val >>> 24);
    b[off + 3] = (byte) (val >>> 32);
    b[off + 2] = (byte) (val >>> 40);
    b[off + 1] = (byte) (val >>> 48);
    b[off + 0] = (byte) (val >>> 56);
    return off + 8;
}

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

Буду также признателен, если существует эквивалент C # для функции Java:

Double.doubleToLongBits(val);

edit: нашел ответ на мой второй вопрос: BitConverter.DoubleToInt64Bits

Ответы [ 2 ]

4 голосов
/ 28 апреля 2010
  1. Вы не можете иметь окончательные параметры в C #
  2. Методы являются "окончательными" по умолчанию.
  3. Нет правого смещения без знака в C #

Итак, мы получаем:

protected static int putLong(byte [] b, int off, long val) {
    b[off + 7] = (byte) (val >> 0);
    b[off + 6] = (byte) (val >> 8);
    b[off + 5] = (byte) (val >> 16);
    b[off + 4] = (byte) (val >> 24);
    b[off + 3] = (byte) (val >> 32);
    b[off + 2] = (byte) (val >> 40);
    b[off + 1] = (byte) (val >> 48);
    b[off + 0] = (byte) (val >> 56);
    return off + 8;
}

Для получения дополнительной информации об операторах побитового сдвига в C #: http://www.blackwasp.co.uk/CSharpShiftOperators.aspx

0 голосов
/ 28 апреля 2010

в значительной степени уберите финал и измените >>> на >>

...