uint16_t exArray[] = "3030422320303030373830434441453141542355";
Я не думаю, что это делает то, что вы пытаетесь сделать.Строковый литерал обрабатывается как указатель на const char.Это даже не для меня.Здесь вам нужно что-то вроде этого:
const char * exArray = "3030422320303030373830434441453141542355";
Это 20 пар шестнадцатеричных значений, каждое из которых представляет символ ASCII (например, 0x41 = A).Как я могу разделить их, чтобы вычислить контрольную сумму?
Вы можете перебрать массив, делая то, что вы хотите сделать с двумя символами внутри цикла:
for (int i = 0; exArray[i]; i+=2) {
printf("my chars are %c and %c\n", exArray[i], exArray[i+1]);
// do the calculations you need here using exArray[i] and exArray[i+1]
}
В качестве альтернативы, как я могу объединить два значения в массиве в одно значение?(например, «4», «1» -> «41»)
Я не уверен, что вы здесь имеете в виду.Вы имеете в виду "41"
, как в строке, представляющей 41?Для этого выделите три символа, затем скопируйте эти два символа и нулевой терминатор.Что-то вроде
char hexByte[3];
hexByte[2] = 0; // setting the null terminator
for (int i = 0; exArray[i]; i+=2) {
hexByte[0] = exArray[i];
hexByte[1] = exArray[i+1];
printf("the string \"hexByte\" is: %s\n", hexByte);
// do something with hexByte here
}
Если вы хотите преобразовать его в целочисленное представление, используйте strtol
:
printf("int value: %ld\n", strtol(hexByte, 0, 16));