#c #printf
#c #printf
Вопрос:
Из приведенного ниже кода я пытаюсь преобразовать результат из result var в string 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;
}
Комментарии:
1. Какую ошибку вы видите? Похоже, ваш строковый буфер просто недостаточно велик.
Ответ №1:
Попробуйте это:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <openssl/md5.h>
char *string = "stelios";
char s[MD5_DIGEST_LENGTH * 2 1] = "";
int main()
{
int i;
unsigned char result[MD5_DIGEST_LENGTH];
MD5(string, strlen(string), result);
// output
for(i = 0; i < MD5_DIGEST_LENGTH; i ){
char temp[3];
sprintf(temp, "x", result[i]);
strcat(s, temp);
}
printf("Final Hex String: %s",s);
return EXIT_SUCCESS;
}
Ответ №2:
При каждом sprintf
вызове он записывает форматированное значение в начало s
, перезаписывая все, что было написано там в предыдущем вызове. Вам нужно сделать что-то вроде sprintf(s i*2, "x", result[i]);
(и изменить длину s
на 2*MD5_DIGEST_LENGTH 1
).
Ответ №3:
Вот что я использовал:
char *digit="0123456789abcdef";
char hex[2*MD5_DIGEST_LENGTH 1],*h;
int i;
for (h=hex,i=0; i<N; i )
{
*h =digit[digest[i] >> 4];
*h =digit[digest[i] amp; 0x0F];
}
*h='';