Использование sprintf медленное, если честно, но вы можете восстановить его с помощью sscanf, делая почти то же самое.
Ну, на самом деле вам придется скопировать каждые два символа в строку буфера, чтобы декодировать каждый по отдельности. Моя первая попытка, ниже неверна:
double hexString2Double(char *buf)
{
char *buf2 = new char[3];
double a;
char* c2d;
c2d = (char *) &a;
int i;
buf2[2] = '\0'
for(i = 0; i < 16; i++)
{
buf2[0] = *buf++;
buf2[1] = *buf++;
sscanf(buf2, "%X", c2d++);
}
return a;
}
Видите ли,% X декодируется как int, а не как байт. Это может даже работать, в зависимости от проблем с низким и высоким порядком байтов, но в основном оно не работает. Итак, давайте попробуем обойти это:
double hexString2Double(char *buf)
{
char *buf2 = new char[3];
double a;
char* c2d;
c2d = (char *) &a;
int i;
int decoder;
buf2[2] = '\0'
for(i = 0; i < 16; i++)
{
buf2[0] = *buf++;
buf2[1] = *buf++;
sscanf(buf2, "%X", &decoder);
c2d++ = (char) decoder;
}
return a;
}
Запрет синтаксических ошибок и тому подобное, я думаю, что это должно работать.