从C中读取两个char作为一个十六进制数字

时间:2018-01-26 01:32:17

标签: c arrays char int hex

所以我正致力于加密/解密项目 我想要做的是从行中读取2个字符,并将它们用作一个十六进制数来解密为原始十六进制值,并相应地打印到文件中正确的ascii字符值..这是我的代码:

sscanf(lineFromFile, "%2C", tmp);

//check carriage return new line as per outline
if(strcmp(tmp, "\n") == 0) {
    fprintf(output, "%c", tmp);
}
//Check for tab whcih is set to TT in encryption scheme
if (strcmp(tmp, "TT") == 0) {
    fprintf(output, "\t");
}
else {
    outchar = ((tmp + i*2) + 16);
    if (outchar > 127) {
        outchar = (outchar - 144) + 32;
    }
    fprintf(output, "%C", outchar); //print directly to file
}

1 个答案:

答案 0 :(得分:0)

如果您有str[]="0120";之类的字符串, 你可以做到

int a, b;
sscanf(str, "%2x%2x", &a, &b);

一次读取str两个字符的内容,将它们视为十六进制数字,并将它们存储到变量ab中。

printf("\n%d, %d", a, b);

会打印

1, 32

%x格式说明符用于读取十六进制数字,2中的%2x用于指定宽度。

现在您可以使用fprintf()将值写入文件。

fprintf(output, "%d %d", a, b);

你上次printf()中有一个拼写错误。 char的格式说明符为%c而不是%C。但在这种情况下,我使用了%d,因为变量的类型为int