Как реализовать на Java операцию & из C++?

145
26 апреля 2019, 03:50

Пытаюсь реализовать шифр "Кузнечика" на Java. Но встала проблема. На С++ есть функция, которую я просто не знаю как реализовать на Java. Ниже представлена моя реализация, но компилятору не нравятся операции с &.

char mul_gf256(char x, char y)
{
    char z = 0x0;
    while (y)
    {
        if (y & 0x01)
            z ^= x;
        x = (x << 0x01) ^ (x & 0x80 ? 0xC3 : 0x00);
        y >>= 1;
    }
    return z;
}

Реализацию на с++ можно глянуть на гитхабе https://github.com/mjosaarinen/kuznechik/blob/master/kuznechik_128bit.c

Answer 1

Компилятору не нравятся побитовые операции с типом сhar (точнее - в конце, т.к. char не подходит для данной задачи)

Эквивалентом сишного char - однобайтового с диапазоном -128..127 в Java будет byte

(в то время как в Java сhar двухбайтовый 0..65535 )

Вот доведённый до компилируемого состояния код (корректность не проверял).

byte mul_gf256(byte x, byte y)
{
    byte z = 0x0, first, second;
    while (y!=0)
    {
        if ((y & 0x01) !=0)
            z ^= x;
        first = (byte) (x << 1);
        if (x < 0)
            second = -61;
        else    
            second = 0;
        x = (byte) ((first) ^ (second));
        y >>= 1;
    }
    return z;
}

Хотя с char и можно выполнять арифметические действия, в большинстве случаев при этом тип повышается до int, так что при присвоении результата char потребуется приведение типа.

char a, b, c;
    a =  'A';
    a++;
    b = (char)(a+1);
    c = (char) (a & b);
READ ALSO
Что будет если вернуть значение в рекурсии?

Что будет если вернуть значение в рекурсии?

Допустим есть такой метод:

139
Циклы for в java

Циклы for в java

У меня появилась одна идея и чтобы ее реализовать мне нужна ваша помощьМожно ли в цикле, for, while, do while, не имеет значения, написать код, который...

139
Аннотация @EnableCaching в spring

Аннотация @EnableCaching в spring

Решил применить кэширование в своем приложении используя аннотацииПовесил @Cacheable(cacheNames="books") на метод по поднятию списка книг и аннотацию...

146
Почему не работает replaceFirst? [дубликат]

Почему не работает replaceFirst? [дубликат]

На данный вопрос уже ответили:

158