我想下面的话会让你很接近。它使用
strtok()
将每一行拆分为空格分隔的标记-然后使用
scanf()
检查标记是否为十六进制字符。
你可以把它插到你的
ReturnAllLines()
功能(通过替换
printf(currentLine)
具有
PrintLineHex(currentLine)
)
void PrintLineHex(char *line) {
char *nl = NULL, *tok = NULL;
int convs = 0;
unsigned ch = '\0';
int hex_line = 0;
nl = strchr(line, '\n');
if (nl) *nl = '\0'; // Remove new-line char ...
tok = strtok(line, " ");
hex_line = 0;
while (tok) {
convs = sscanf(tok, "%x", &ch);
if (convs == 1 && strlen(tok) == 2) {
hex_line = 1;
printf("%02hhX ", ch);
}
tok = strtok(NULL, " ");
}
if (hex_line) puts("");
}
它还检查每个令牌的宽度。如果你想适应不同字符宽度的十六进制值,你可以很容易地调整这个方面。
使用示例输入输出…
A5 12 00 24 00 01 22 00 4F 11
A2 48 4A D1 53 6D 8A D1 61 40
A5 22 30 44 50 01 22 00 4F 11
A2 18 2A 31 43 6D 8A D1 61 40