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进制之后就变成了整数,你存的时候也得存成整型的