Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Как суммировать байты в цикле? / 11 сообщений из 11, страница 1 из 1
04.04.2012, 19:07:34
    #37739101
Xsl
Xsl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как суммировать байты в цикле?
Всем привет,

Есть набор байтов. Необходимо получить сумму этих байтов.
Кол-во байтов в массиве заранее не известно и поэтому надо суммирование проводить в цикле.

Сделал следующим образом:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
		byte[] b = { (byte) 0x2B, (byte) 0x37, (byte) 0x80, (byte) 0x30,
				(byte) 0x30, (byte) 0x30, (byte) 0x30, (byte) 0x30,
				(byte) 0x30, (byte) 0x3B, (byte) 0x05 };
		int sum = 0;
		for (int i = 0; i < b.length; i++) {
			sum = sum + b[i];
		}
		System.out.println(String.format("0x%04X", sum));


В результате получаю:
Код: java
1.
0x0142


И это значение не правильное.

Если суммировать на прямую, то результат получается правильный:
Код: java
1.
2.
int i = 0x2b + 0x37 + 0x80 + 0x30 + 0x30 + 0x30 +0x30 + 0x30 + 0x30 + 0x3b + 0x05;
System.out.println(String.format("0x%04X", i));


Код: java
1.
0x0242



Подскажите пожалуйста как правильно суммировать байты в цикле?
...
Рейтинг: 0 / 0
04.04.2012, 19:22:24
    #37739130
grasoff.net
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как суммировать байты в цикле?
System.out.println((byte) 0x80);
System.out.println(0x80);
...
Рейтинг: 0 / 0
04.04.2012, 19:28:57
    #37739142
Xsl
Xsl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как суммировать байты в цикле?
А как это можно применить при суммировании в цикле?
...
Рейтинг: 0 / 0
04.04.2012, 19:32:06
    #37739148
tolyanchik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как суммировать байты в цикле?
Тип byte знаковый.

Удалите из примера 0x80 - всё заработает.
...
Рейтинг: 0 / 0
04.04.2012, 19:32:55
    #37739151
grasoff.net
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как суммировать байты в цикле?
XslА как это можно применить при суммировании в цикле?посмотреть хотя б, что будет в консоли после выполнения двух этих строк
...
Рейтинг: 0 / 0
04.04.2012, 19:33:26
    #37739153
grasoff.net
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как суммировать байты в цикле?
tolyanchikТип byte знаковыйкак бы и int тоже знаковый
...
Рейтинг: 0 / 0
04.04.2012, 19:39:11
    #37739161
Xsl
Xsl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как суммировать байты в цикле?
Eclipse сразу же показывает ошибку возле ", 0x80,":
"Type mismatch: cannot convert from int to byte"
И предлагает заменить на "(byte) 0x80".
...
Рейтинг: 0 / 0
04.04.2012, 19:41:11
    #37739165
tolyanchik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как суммировать байты в цикле?
2grasoff.net

Обратного я не утверждал:)

Но у топикстартера проблема с 0x80, а не с 0x80000000
...
Рейтинг: 0 / 0
04.04.2012, 19:42:10
    #37739167
Xsl
Xsl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как суммировать байты в цикле?
"Удалите из примера 0x80 - всё заработает. "

Не могу. Потому что вот как раз на этом примере у меня начались проблемы суммирования.

Тоесть, если уберу сейчас, то посчитается все правильно. Если в будущем попадется этот байт, будет ошибка.
...
Рейтинг: 0 / 0
04.04.2012, 19:52:07
    #37739183
tolyanchik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как суммировать байты в цикле?
Код: java
1.
2.
3.
4.
5.
        byte b1 = (byte)0x80;
        byte b2 = (byte)0x11;
        
        System.out.printf("0x%x\n", b1 & 0xFF);
        System.out.printf("0x%x\n", b2 & 0xFF);



Код: java
1.
2.
3.
4.
run:
0x80
0x11
BUILD SUCCESSFUL (total time: 0 seconds)
...
Рейтинг: 0 / 0
05.04.2012, 08:23:33
    #37739595
Xsl
Xsl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как суммировать байты в цикле?
Спасибо!

Сделал следующим образом:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
		byte[] b = { (byte) 0x2B, (byte) 0x37, (byte) 0x80, (byte) 0x30,
				(byte) 0x30, (byte) 0x30, (byte) 0x30, (byte) 0x30,
				(byte) 0x30, (byte) 0x3B, (byte) 0x05 };
		int sum = 0;
		for (int i = 0; i < b.length; i++) {
			int si = b[i] & 0xFF;
			sum = sum + si;
		}
		System.out.println(String.format("0x%04X", sum));


Код: java
1.
0x0242
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Как суммировать байты в цикле? / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]