Я пытаюсь создать программу, которая определяет, правильно ли создан шестнадцатеричный файл Intel, и одна программа, которую я использую для их создания, не сгенерировала его правильно, поэтому я собираюсь создать ее.
Пока что я могу прочитать строку из целевого файла, но у меня возникла проблема с преобразованием шестнадцатеричного числа из строки в число для сравнения.Вот мой тревожный фрагмент:
//hx=opened file handle
unsigned char hexv,hexsz,hexcs;
while ((line=getline(&hexstring,&buffer,hx))> -1){
//Trying to convert hexadecimal character in byte 7 and 8 of string to number
//Hexsz must contain actual number representing number of hex digits to process
sprintf(hexsz,"%02x",hexstring[7]);
//Checksum = 0
hexcs=0;
for (hexc=0;hexc<(hexsz*2);hexc+=2){
//Add next hexadecimal number to checksum
sprintf(hexv,"%02x",hexstring[9+hexc]);
hexcs+=hexv;
}
//Check checksum with stored checksum
sprintf(hexv,"%02x",hexstring[9+hexc]);
if (hexcs != hexv){
printf("HEX checksum error!\n");
}
}
Что-то не так с этими спринтами, и я не могу понять это.
Единственное, что я знаю, это сделать следующее:
- Выделить временный символ *
- строка скопировать шестнадцатеричное значение в этот символ *
- использовать strtol для этого символа
Но не 'Есть ли более простой способ сделать это?
Я попытался преобразовать strtol (startaddress, endaddress, 16), и программа не распознала бы это.Ожидается, что endaddress будет равен NULL.
Так, как проще всего преобразовать двухбайтовую строку в большой строке в шестнадцатеричное?
Например, если моя строка
:10007B00AB83AD8290015C938D828B83F531EF85E1
и я хотел преобразовать из него значение 7B, какой самый простой способ сделать это?