所以我正在做一个加密/解密项目。
我想做的是从行中读取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
}

最佳答案

如果您有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

关于c - 从数组中读取两个char作为C中的一个十六进制数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48454614/

10-11 23:08
查看更多