Я пытаюсь преобразовать «двойное» значение (скажем, 1.12345) в 8-байтовую шестую строку. Я использую следующую функцию для преобразования значения double в шестую строку.Байт-массив с шестнадцатеричными цифрами (0-9 и только от A до F)
std::string double_to_hex_string(double d)
{
unsigned char *buffer = (unsigned char*)&d;
const int bufferSize = sizeof(double);
char converted[bufferSize * 2 + 1];
//char converted[bufferSize];
int j = 0;
for(int i = 0 ; i < bufferSize ; ++i)
{
sprintf(&converted[j*2], "%02X", buffer[i]);
++j;
}
string hex_string(converted);
return hex_string;
}
Эта функция возвращает шестнадцатеричную шестнадцатеричную строку. Я затем сжать эту строку, чтобы вписаться в 8 байт через этот код
string hexStr = double_to_hex_string(TempD);
unsigned char sample[8];
for (int i = 0; i < hexStr.length()/2 ; i++)
{
sscanf((hexStr.substr(i*2,2)).c_str(), "%02X", &sample[i]);
}
Теперь, как я могу получить шестнадцатеричные цифры, представляющие эти 8 байт «образец» массив. Для каждого байта должна быть только одна шестнадцатеричная цифра. Мне нужно добавить эту восьмибайтную шестую строку в глобальную строку.
Если есть другое решение, которое может преобразовать двойное значение в 8 шестнадцатеричных цифр и наоборот, это было бы высоко оценено.
С уважением.
Как вы ожидаете получить «одну шестую цифру на каждый байт»? Шестнадцатеричная цифра может кодировать только 16 значений, в то время как байт содержит 256. Если вам нужно сделать его меньше, но все еще с читаемыми символами, загляните в [base64] (http://en.wikipedia.org/wiki/Base64). –
Что вы * пытаетесь сделать? Нужна ли ваша «глобальная» строка для чтения или иметь определенный формат? Если нет, вы можете просто скопировать 8 байтов 'double' непосредственно в строку. –
@DrewDormann Да, глобальная строка имеет определенный формат. Я должен сохранить двойное значение в 8 байт, и каждый из этих 8 байтов должен представлять шестую цифру. Позже эти 8 байтов должны быть преобразованы обратно в двойное значение. –