2016-03-24 1 views
-2

У меня есть массив, содержащий следующие шестнадцатеричные значения:Сумма из массива значений Hex для вычисления контрольной суммы не работает

A8, 00, 00, 11, 01, 44, 33, 28, 0 ° С, 15 , 2В, 00, 28, FF, 00, 00, 00, FE, FF, 80, 7F, 00, 00, FF, 00, 00, 00, FE, FF, 80, 7F, 00, 00, FF, 00 , 00, 00, FE, FF, 80, 7F, 00, 00, FF, 00, 00, 00, FE, FF, 80, 7F, 00, 00, FF, 00, 00, 00, FE, FF, 80 , 7F, 00, 00, FF, 00, 00, 00, FE, FF, 80, 7F, 00, 00, FF, 00, 00, 00, FE, FF, 80, 7F, 00, 00, FF, 00 , 00, 00, FE, FF, 80, 7F, 00, 00, FF, 00, 00, 00, FE, FF, 80, 7F, 00, 00, FF, 00, 00, 00, FE, FF, 80 , 7F, 00, 00, FF, 00, 00, 00, FE, FF, 80, 7F, 00, 00, FF, 00, 00, 00, FE, FF, 80, 7F, 00, 00, FF, 00 , 00, 00, FE, FF, 80, 7F, 00, 00, FF, 00, 00, 00, FE, FF, 80, 7F, 00, 00, FF, 00, 00, 00, FE, FF, 80, 7F, 00, 00, 0C, 00, 03, 35, 00, 00, 00

мне нужно comupte контрольной суммы из них, результата я знаю быть C5.

мне было дано следующее, что я только видя, как неясные намеки они неопределенны:

  • контрольная сумма определяется путем суммирования значений, а также для результата «использовать дальше всего самые правые байты в шестнадцатеричном «

  • значащих байты всех данных суммируются

  • Добавить 8bit данных широкого

Если вы хотите это как десятичном:

168, 0, 0, 17, 1, 68, 51, 40, 12, 21, 43, 0, 40, 255, 0, 0 , 0, 254 255 128, 127,0, 0, 255,0, 0, 0, 254 255 128, 127,0, 0, 255,0, 0, 0, 254 255 128 127, 0, 0, 255,0, 0, 0, 254 255 128 127, 0, 0, 255,0, 0, 0, 254 255 128 127, 0, 0, 255,0, 0, 0, 254 255 128, 127,0, 0, 255,0, 0, 0, 254 255 128, 127,0, 0, 255,0, 0, 0, 254 255 128, 127,0, 0, 255,0, 0, 0, 254 255 128, 127,0, 0, 255,0, 0, 0, 254 255 128, 127,0, 0, 255,0, 0, 0, 254 255 128, 127, 0, 0, 255,0, 0, 0, 254 255 128, 127, 0, 0, 255,0, 0, 0, 254 255 128, 127, 0, 0, 255,0, 0, 0, 254 255 128, 127,0, 0, 255,0, 0, 0, 254 255 128, 127,0, 0, 12,0 , 3, 53, 0, 0, 0

и Decimal checksum is 197

Любая помощь будет оценена.

Edit:

В ответ на вопрос RJM «s, я по существу пытался пробегаем по значениям и суммированием LSB, а также старший бит. следующим образом:

int LSB = 0; 
int MSB = 0; 
foreach (Byte value in byteArray) { 
    LSB += (value & 1); 
    MSB += (value >> 7); 
} 
//Expected Checksum is 197 
//LSB == 52 
//MSB == 60 
+0

Какой код вы пробовали? – RJM

+0

По сути, я попытался суммировать LSB, а также MSB каждого байта, например: 'int LSB = 0; int MSB = 0; foreach (значение байта в байтовом массиве) { LSB + = (значение & 1); \t MSB + = (значение >> 7); } ' – user275712

ответ

0

К счастью, больше информации была предоставлена ​​мне, и я могу опубликовать решение.

int chk = 0; 
foreach (Byte value in byteArray) { 
    chk += value; 
} 
chk = (chk & 255); 

Так что, по сути, мне нужно было суммировать все байты, а затем использовать LSB результата.

Смежные вопросы