所以我正在做一个加密/解密项目。
我想做的是从行中读取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
内容,请将它们视为十六进制数字并将其存储到变量a
和b
中。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/