文字列をバイナリコードに変換して戻す単純なプログラムに取り組んでいます。私は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
これら 2 つのソリューションのどちらが優れていますか?