【发布时间】:2012-04-03 14:44:23
【问题描述】:
我有以下代码,它采用双精度值并将其转换为十六进制表示,反之亦然。我想知道它是否有任何潜在的问题——我是否忽略了一些东西。
double hex_to_double2(string &hexString)
{
unsigned char byte_string[sizeof(double)];
int number;
int j = 0;
for(int i = 0; i < hexString.size() ; i += 2)
{
sscanf(&hexString[i], "%02x", &number);
byte_string[j] = (unsigned char)number;
++j;
}
double p = (double&)byte_string;
return p;
}
std::string double_to_hex_string(double d)
{
unsigned char *buffer = (unsigned char*)&d;
int bufferSize = sizeof(double);
char converted[bufferSize * 2];
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;
}
它似乎工作正常。但是有人告诉我char converted[bufferSize * 2]; 应该是char converted[bufferSize * 2 + 1];
是这样吗?
【问题讨论】:
-
如果您有 C99 兼容的
printf实现,您可以考虑使用"%a"格式字符串来检查您的代码。