我有一个字符串,我给了一个设备,它给了我一个相同大小的密文字符串(AES 128位),我不确定它在哪个基础,所以我可以将它转换为十六进制。
如果我在每个char [I]上使用printf(“%x”)它会给我正确的控制台答案(唯一的例外是一些十六进制数字在f之前,但同一字节的最右边仍然是有正确的数字,就在f之前。)
我在此加密网站here上检查我从设备获得的回复。
例如,如果我输入文本区域:abcdefghijklmnop
我应该得到的输出是: 5c 90 71 61 9f 9d fe a1 0b 4a eb 1d 58 69 ca
然而,当我在每个char上使用printf(“%x”)时,我得到: 5c ffffff90 71 61 ffffff9f ffffff9d fffffffe ffffffa1 0b 4a ffffffeb 1d 58 69 ffffffca ffffffbe
我的结束状态是我想将正确的输出放在字符串中,所以如果有人使用printf(“%s”),它只会打印十六进制数字。
编辑:这是我在char中找到的前8个字节* \\ 220qa \ 237 \ 235 \ 376 \ 241 printf(%x)将此转换为十六进制。我不确定这是什么基础所以我可以使用它。
欢迎任何建议。 感谢
答案 0 :(得分:0)
当输出字符不是所需格式时会发生这种情况,因此您需要将它们转换为字符格式,这样您就可以添加显式类型转换并将其类型转换为unsigned char。
答案 1 :(得分:0)
您可以使用sprintf()
(或更好但需要更多代码,snprintf()
)将输出写入字符串
char destin[1000]; // large enough
char *tmp = destin;
tmp += sprintf(tmp, "Result:"); // assume enough space
for (k = 0; k < length; k++) {
tmp += sprintf(tmp, " %02x", (unsigned char)value[k]); // assume enough space
}
printf("%s\n", destin); // final string in destin; tmp points to the terminator