在 C 中使用 sprintf 复制十六进制值
从下面的代码中,我试图将结果 var 的结果获取到字符串 var 中,但到目前为止没有成功。 怎么了?为什么我不能得到正确的结果?如果直接打印就可以了...
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <openssl/md5.h>
char *string = "stelios";
unsigned char s[MD5_DIGEST_LENGTH];
int main()
{
int i;
unsigned char result[MD5_DIGEST_LENGTH];
MD5(string, strlen(string), result);
// output
for(i = 0; i < MD5_DIGEST_LENGTH; i++){
sprintf(s,"%0x", result[i]);//
printf("%x",s[i]);
}
printf("\n%x",s);
return EXIT_SUCCESS;
}
From the code below I am trying to get the result of the result var into a string var but no success so far.
What's wrong? Why I can't get the right result? If I print this directly it's ok...
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <openssl/md5.h>
char *string = "stelios";
unsigned char s[MD5_DIGEST_LENGTH];
int main()
{
int i;
unsigned char result[MD5_DIGEST_LENGTH];
MD5(string, strlen(string), result);
// output
for(i = 0; i < MD5_DIGEST_LENGTH; i++){
sprintf(s,"%0x", result[i]);//
printf("%x",s[i]);
}
printf("\n%x",s);
return EXIT_SUCCESS;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
试试这个:
Try this:
每次调用 sprintf 时,它都会将格式化值写入到 s 的开头,覆盖上一次调用中写入的内容。您需要执行类似
sprintf(s + i*2, "%02x", result[i]);
的操作(并将s
的长度更改为2*MD5_DIGEST_LENGTH+1
)。Each time
sprintf
is called, it writes the formatted value to the beginning ofs
, overwriting whatever was written there in the previous call. You need to do something likesprintf(s + i*2, "%02x", result[i]);
(and change the length ofs
to2*MD5_DIGEST_LENGTH+1
).这是我用过的:
Here's what I've used: