Я работаю на уступках, и прошу меня, чтобы вычислить контрольную сумму отгонки значащих байт из них дополняет версию целого ...C - Зачистка младших байт
Это часть из схемы назначения меня путают:
«Значение поля CHECKSUM (MM) рассчитывается путем принятия младшего значащего байта значения дополнения 1 в сумме полей COUNT, ADDRESS и DATA записи"
Im немного неясно, что это значит, поскольку я на самом деле не работал с эс комплементы или LSB-х в С
То, что я до сих пор:
int checkSum(int count, int address, char* data)
{
int i = 0;
int dataTotal = 0;
for(i = 0; i < strlen(data); i += 2)
{
dataTotal += (getIntFromHex(data[i]) * 16) + getIntFromHex(data[i + 1]);
}
int checksum = ~(count + address + dataTotal) & 1;
printf("Checksum: %.2X\n", checksum);
return checksum;
}
Я не ожидал, чтобы это работало, но я сделал некоторые исследования, и это то, что я придумал.
Мне нужно уточнить, что подразумевается под наименее значимым байтом.
P.S. Причина цикла for - просто получить общее количество данных. Не важно для этого, но код использует переменную, поэтому я решил, что просто скопирую все это, чтобы избежать путаницы.
Вы забыли задать нам вопрос. Можете ли вы указать, что вы не понимаете или что вам нужно? Вы знаете, что такое дополнение? Знаете ли вы, что такое младший байт? Кроме того, я вижу вызов 'strlen' в вашем коде. Но я не совсем уверен, какие строки имеют отношение ко всему. Похоже, что ваш ввод не является строкой. –
Обновлен мой вопрос. Я просто хочу знать, как я могу это сделать, –
Спецификация не очень ясна. Для начала, типы int могут быть проблемой, поскольку сумма может переполнять maxInt.и таким образом вызывать UB. Операции, такие как вычисление контрольных сумм, CRC, обычно выполняются с неподписанными типами. –