【发布时间】:2019-07-24 13:17:19
【问题描述】:
我正在尝试制作一个程序来确定是否正确创建了一个 intel hex 文件,而我用来生成它们的一个程序没有正确生成一个,所以我要制作一个。
到目前为止,我可以从目标文件中读取一行,但是在将十六进制数从字符串转换为要比较的数字时遇到问题。这是我令人不安的sn-p:
//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");
}
}
这些 sprintf 出了点问题,我想不通。
我唯一知道的就是执行以下操作:
- 分配一个临时字符*
- 字符串将十六进制值复制到该字符*
- 在该字符上使用 strtol
但是没有更简单的方法吗?
我尝试使用 strtol(startaddress,endaddress,16) 进行转换,但程序无法识别。它期望 endaddress 为 NULL。
那么将大字符串中的两字节字符串转换为十六进制更简单的方法是什么?
例如,如果我的字符串是
:10007B00AB83AD8290015C938D828B83F531EF85E1
我想从中转换值 7B,最简单的方法是什么?
【问题讨论】:
-
为什么你不能在整个十六进制字符串上使用
strtol,或者将一对数字提取到一个临时字符串中并在上面使用strtol?你没有清楚地表明你对strtol的使用。
标签: c string numbers hex decimal