Как посчитать контрольную сумму массива байт? - C#
Формулировка задачи:
Должен быть массив byte такого вида {68 06 00 06 19 25 4A}. Начало всегда {68 06 00 06..}.
В нем 6й элемент равен сумме предыдущих 5ти элементов(без 68). Если трехзначное число, то последние 2 знака.
Смысл проги такой: на входе число double, создаю массив байт, отправляю массив на СОМ-порт.
Проблема вот в чем: не могу правильно записать байты(сумму). Цифры пишет норм, а вот с буквами косяк.
Помогите кто чем может. Только не отправляйте читать поисковики
Вот мой код:
Пробовал различные варианты
, но это все не то.
Помогите записать, плиз
public static void DoubleToReplyByte(double d, byte[] dst) // например, 68 06 00 06 19 25 4A , где d= -92.5 { dst[0] = 0x68;//всегда dst[1] = 0x06;//всегда dst[2] = 0x00;//всегда dst[3] = 0x06;//всегда if (d > 0) dst[4] = (byte)(d / 10); else dst[4] = (byte)(d / 10 + 16);//всегда значения от 0 до 9 будут получаться dst[5] = (byte)((d * 10) % 100);//нашел косяк, пока писал. оно конвертит в 16ричную, а мне не надо int dst1 = Convert.ToInt32(dst[1]); int dst2 = Convert.ToInt32(dst[2]); int dst3 = Convert.ToInt32(dst[3]); int dst4 = Convert.ToInt32(dst[4]), hex; int dst5 = Convert.ToInt32(dst[5]); int dst6 = dst1 + dst2 + dst3 + dst4 + dst5; if(dst6>255) dst6=dst6-256; string dst_str = dst6.ToString("X2"); dst[6] = //?????? }
//dst[7]=Convert.ToByte(dst6); //dst[7] = (byte)dst_str; //dst[7] = byte.Parse(dst_str, System.Globalization.NumberStyles.HexNumber); //dst[7] = Convert.ToByte(dst6); //dst[7] = byte.Parse(dst_str); //dst[7] = Convert.ToByte(dst_str);
Решение задачи: «Как посчитать контрольную сумму массива байт?»
textual
Листинг программы
/* Вычисление BCC */ int res = dst[1] + dst[2] + dst[3] + dst[4] + dst[5]; dst[6] = (byte)(res & 0xFF);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д