2016-07-15 6 views
0

Я пытаюсь вычислить простую контрольную сумму, а затем я делаю контрольную сумму.Не удалось правильно сформировать контрольную сумму

public void readfile() 
{ 

    byte counter = 0; 
    byte[] data = new byte[68];  
    while(x.hasNextInt()) 
    { 
     data[counter++] = (byte)x.nextInt(); 
     if(counter == 67) 
      break; 

    } 

    int sum = 0; 
    for (int i = 0; i < 67; i++) 
     sum += (data[i] & 0xFF); 
    System.out.println((int)(sum & 0xFF)); //checksum 

    //perform checksum test. 
    data[counter] = (byte)(sum & 0xFF); 
    sum = 0; 
    for (int i = 0; i < 68; i++) 
     sum += (data[i] & 0xFF); 

    System.out.println((int)(sum & 0xFF)); //checksum test 
} 

Я читаю первые 67 целых значений файла и сохраняю их в массиве байтов. Все целые числа: < 256. Переменная 'x' - это файл, который я читаю. Однако, когда я выполняю тест контрольной суммы, выводимое значение не равно 0. Я не могу диагностировать, где я неправильно вычисляю.

ответ

0

Я не уверен, что вы пытаетесь сделать. Вы получаете первые 67 символов, вычисляете контрольную сумму, а затем принимаете, что те 67, плюс контрольная сумма, равны 0. Это не так. Вы ДОБАВЛЯЕТ контрольную сумму, а не вычитаете ее.

Итак, если контрольная сумма не равна 0 или 128, вы получаете значение, которое в два раза превышает контрольную сумму. Правильно?

+0

Спасибо, что исправил проблему! –