我正在开发一个简单的程序,它将字符串转换为二进制代码并返回。我在 Ubuntu 上工作,想用 Visual Studio 2015 在 Windows 上编译程序。虽然 Linux 构建运行良好,但在 Windows 上它可以编译,但会崩溃,例如
bitset<N> char
调用以下函数时:
bool bin2string(std::string *psBinaryString, std::string *psCharakterString)
{
psCharakterString->clear();
char cTempArray[8];
char cTemp;
for(unsigned int i = 0; i < psBinaryString->length(); i += 8)
{
for(unsigned int j = 0; j < 8; ++j)
{
cTempArray[j] = psBinaryString->c_str()[j + i];
}
std::bitset<8> Bitset(cTempArray);
cTemp = static_cast<char>(Bitset.to_ulong());
psCharakterString->push_back(cTemp);
}
return true;
}
现在,我的问题是,这段代码有什么问题?为什么它可以在 Linux (gcc) 和 Windows (MinGW) 上运行,但不能在带有 Visual Studio 2015 的 Windows 上运行?
我目前的解决方法是:
#ifdef _WIN32
bool bin2string(std::string *psBinaryString, std::string *psCharakterString)
{
psCharakterString->clear();
char cTempArray[8];
char cTemp;
for(size_t i = 0; i < psBinaryString->length(); i += 8)
{
for(size_t j = 0; j < 8; ++j)
{
cTempArray[j] = psBinaryString->c_str()[j + i];
}
cTemp = static_cast<char>(strtol(cTempArray, 0, 2));
psCharakterString->push_back(cTemp);
}
return true;
}
#else
bool bin2string(std::string *psBinaryString, std::string *psCharakterString)
{
psCharakterString->clear();
char cTempArray[8];
char cTemp;
for(unsigned int i = 0; i < psBinaryString->length(); i += 8)
{
for(unsigned int j = 0; j < 8; ++j)
{
cTempArray[j] = psBinaryString->c_str()[j + i];
}
std::bitset<8> Bitset(cTempArray);
cTemp = static_cast<char>(Bitset.to_ulong());
psCharakterString->push_back(cTemp);
}
return true;
}
#endif
这两种解决方案中哪一种更好?