16进制流变成二进制流

C++16进制流变成二进制流并且可以逆向,最好还有大神能解释一下我将一个字符串变成16进制存储到文本文件内,为什么会乱码

ofstream fout("file.dat", ios::binary);这样就可以打开一个二进制流的文件,之后只要写就行了,比如写·一个数:
int number = 30; fout.write((char *)(&number),sizeof(number));
不清楚你现在所谓的村文本文件乱码什么意思,如果你不是二进制存储,那么存字符串的话就应该是你存的内容;
除非是你所说的,字符串转换为16进制这块出了问题,可以的话最好贴息代码

十六进制转二进制,请跑一下试试:


string HexToBin(const string &strHex)
{
    if (strHex.size() % 2 != 0)
    {
        return "";
    }

    string strBin;
    strBin.resize(strHex.size() / 2);
    for (size_t i = 0; i < strBin.size(); i++)
    {
        uint8_t cTemp = 0;
        for (size_t j = 0; j < 2; j++)
        {
            char cCur = strHex[2 * i + j];
            if (cCur >= '0' && cCur <= '9')
            {
                cTemp = (cTemp << 4) + (cCur - '0');
            }
            else if (cCur >= 'a' && cCur <= 'f')
            {
                cTemp = (cTemp << 4) + (cCur - 'a' + 10);
            }
            else if (cCur >= 'A' && cCur <= 'F')
            {
                cTemp = (cTemp << 4) + (cCur - 'A' + 10);
            }
            else
            {
                return "";
            }
        }
        strBin[i] = cTemp;
    }

    return strBin;
}

1.最简单的方法是用bitset bt(变量) n是转换成多少位的 比如 bitset bt(10),bt就是10对应的32位二进制 bt.to_string变成字符串
2.你是怎么把字符串转成16进制存到文件中的,你不会把地址给存到文件中了吗,首先转成16进制之后就变成了整数,你存的时候也得存成整型的