将输出格式化为字符串

时间:2014-09-12 06:56:28

标签: c string format

我有一个字符串,我给了一个设备,它给了我一个相同大小的密文字符串(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)将此转换为十六进制。我不确定这是什么基础所以我可以使用它。

欢迎任何建议。 感谢

2 个答案:

答案 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