Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > собственная функция checksum для byte


Автор: newinjava 9.1.2013, 18:53
Здравствуйте. 
Подскажите мне пожалуйста как мне высчитать контрольную сумму для следующего пакета:
Код

byte[] data = new byte[]{
        (byte) 0xFF,
        'M',
        action,
        (byte)point.getX(),
        (byte)point.getY()
};


Мне нужно чтобы моя контрольная сумма занимала как можно меньше места. т.Е. Я буду ужастно рад, если для моего пакета хватит одного Байта для проверки.

если возможно, то функция вырешивающаяя конторльную сумму должна иметь следующий заголовок:
public byte getCheck(byte[] data);

Возможно ли это, и если да то как?

Данные бутут с JAVA отправляться на C++, а насколько мне известно то у JAVA байт от -128 до 127 а у C++ от 0 до 255.
Это тоже надо учесть, так как на стороне C++ надо будит как-то это всё проверить.

Мне кажется что спомощью стандартных JAVA библиотек это не получится, так как Interface Checksum getValue() возвращает long, а это для меня слишком много.

Автор: LSD 10.1.2013, 09:49
Код

    public static int getCrc(byte b) {
        return 1 & Integer.bitCount(0xFF & b);
    } 

Эта контрольная сумма детектирует единичную ошибку. Для более серьезных вещей рекомендую http://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%B4_%D0%A5%D1%8D%D0%BC%D0%BC%D0%B8%D0%BD%D0%B3%D0%B0 .

Автор: newinjava 10.1.2013, 10:23
Спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)