Преобразование долго [64] к байту [512] в Java?

Я портирую процесс на Java. Там уже работает версии в C# и C++.

У меня есть раздел в C#, который я действительно Упорядочиваю. Копия (...) для преобразования 64 ulongs в 512 байтов и той строки в C++ я использую memmove (...), чтобы сделать то же самое. Что доступно в Java для достижения того же результата? Мне нужна та же двоичная информация в том же порядке так же, как байты вместо longs.

Править:

Причина, которую я портирую на Java, состоит в том, чтобы использовать в своих интересах мобильность, которую естественно имеет Java. Я не хотел бы использовать собственный код.

Другая вещь. Так как Java не содержит неподписанные значения, тогда я должен изменить то, чем я запрашиваю просто немного. Я хотел бы достигнуть 8 неподписанных значений байта от каждого из 64 longs (ulongs в C# и C++) так, чтобы я мог использовать те значения в индексах в массивах позже. Это должно произойти тысячи времен, таким образом, самым быстрым путем был бы лучший способ.

16
задан Corey Ogburn 6 February 2010 в 06:10
поделиться

1 ответ

ByteBuffer для этого хорошо работает: просто вставьте 64 длинных значения и получите байт[] с помощью метода array(). Класс ByteOrder может эффективно обрабатывать эндийские проблемы. Например, включение подхода, предложенного в комментарии wierob:

private static byte[] xform(long[] la, ByteOrder order) {
    ByteBuffer bb = ByteBuffer.allocate(la.length * 8);
    bb.order(order);
    bb.asLongBuffer().put(la);
    return bb.array();
}

Addendum: результирующие компоненты byte[] подписаны, 8-битные значения, но для Java-массивов требуются неотрицательные целочисленные значения индекса. При добавлении байта байта в int будет произведено знаковое расширение, но маскировка битов более высокого порядка даст беззнаковое значение байта b:

int i = (int) b & 0xFF;

Этот ответ развивает применимые правила приоритета операторов. Этот родственный ответ демонстрирует аналогичный подход для значений double .

20
ответ дан 30 November 2019 в 22:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: