gpt4 book ai didi

c++ - 字节数组到十六进制数字(仅限 0 到 9 和 A 到 F)

转载 作者:行者123 更新时间:2023-11-28 07:42:19 25 4
gpt4 key购买 nike

我正在尝试将“ double ”值(比如 1.12345)转换为 8 字节的十六进制字符串。我正在使用以下函数将 double 值转换为十六进制字符串。

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;
}

此函数返回 16 字节的十六进制字符串。然后我通过这段代码压缩这个字符串以适应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]);
}

现在,我怎样才能得到表示“sample”数组中这 8 个字节的十六进制数字。每个字节应该只有一个十六进制数字。我需要将这个 8 字节的十六进制字符串附加到全局字符串。

如果有任何其他解决方案可以将 double 值转换为 8 个十六进制数字,反之亦然,我们将不胜感激。

问候。

最佳答案

一个十六进制数字代表半个字节,因此如果您限制为 8 个十六进制数字,您也只能存储 4 个字节。

此解决方案将从 float 中编码数字,通常为 4 个字节。

std::string double_to_hex_string(double d)
{
// Create a stream that writes 2 digit hex values
std::stringstream stream;
stream << std::hex << std::setfill('0');

float f = d;
const unsigned char *buffer = reinterpret_cast<unsigned char*>( &f );
const unsigned char *buffer_end = buffer + sizeof(f);

// Write each byte as 2 character hex.
while ( buffer != buffer_end )
{
stream << std::setw(2) << static_cast<int>( *buffer );
++buffer;
}

return stream.str();
}

关于c++ - 字节数组到十六进制数字(仅限 0 到 9 和 A 到 F),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15551724/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com