我有一个 double 数字,我想用IEEE 754 64位二进制字符串表示它。
目前,我正在使用这样的代码:
double noToConvert;
unsigned long* valueRef = reinterpret_cast<unsigned long*>(&noToConvert);
bitset<64> lessSignificative(*valueRef);
bitset<64> mostSignificative(*(++valueRef));
mostSignificative <<= 32;
mostSignificative |= lessSignificative;
RowVectorXd binArray = RowVectorXd::Zero(mostSignificative.size());
for(unsigned int i = 0; i <mostSignificative.size();i++)
{
(mostSignificative[i] == 0) ? (binArray(i) = 0) : (binArray(i) = 1);
}
上面的代码工作正常,没有任何问题。但是,如果看到的话,我正在使用reinterpret_cast并使用unsigned long。因此,此代码在很大程度上取决于编译器。谁能告诉我如何编写独立于平台且不使用任何库的代码。我很好,如果我们使用标准库甚至是位集,但是我不想使用任何依赖于机器或编译器的代码。
提前致谢。
最佳答案
如果您愿意假定double
是IEEE-754双重类型:
#include <cstdint>
#include <cstring>
uint64_t getRepresentation(const double number) {
uint64_t representation;
memcpy(&representation, &number, sizeof representation);
}
如果您甚至不想做这个假设:
#include <cstring>
char *getRepresentation(const double number) {
char *representation = new char[sizeof number];
memcpy(representation, &number, sizeof number);
return representation;
}