C++ 以换行增量返回二进制结果
我正在尝试将十六进制转换为二进制,其中包含一个文本文件: 3c011001 34300000 8e080000 20090003 11200004 但它在同一行输出二进制: 0011 1100 0000 0001 0001 0000 0001 0011 0100 0011 0000 0000 000 000 1110 0000 000 000 000 000 000 000 000 0010 0000 我想这样退: 0011 1100 0000 0001 0001 0000 0001 0011 0100 0011 0000 0000 等等。。每行十六进制C++ 以换行增量返回二进制结果,c++,binary,hex,C++,Binary,Hex,我正在尝试将十六进制转换为二进制,其中包含一个文本文件: 3c011001 34300000 8e080000 20090003 11200004 但它在同一行输出二进制: 0011 1100 0000 0001 0001 0000 0001 0011 0100 0011 0000 0000 000 000 1110 0000 000 000 000 000 000 000 000 0010 0000 我想这样退: 0011 1100 0000 0001 0001 0000 0001 0011
string hex (string sHex)
{
string sReturn = "";
for (int i = 0; i < sHex.length (); ++i)
{
switch (sHex [i])
{
case '0': sReturn.append ("0000 "); break;
case '1': sReturn.append ("0001 "); break;
case '2': sReturn.append ("0010 "); break;
case '3': sReturn.append ("0011 "); break;
case '4': sReturn.append ("0100 "); break;
case '5': sReturn.append ("0101 "); break;
case '6': sReturn.append ("0110 "); break;
case '7': sReturn.append ("0111 "); break;
case '8': sReturn.append ("1000 "); break;
case '9': sReturn.append ("1001 "); break;
case 'a': sReturn.append ("1010 "); break;
case 'b': sReturn.append ("1011 "); break;
case 'c': sReturn.append ("1100 "); break;
case 'd': sReturn.append ("1101 "); break;
case 'e': sReturn.append ("1110 "); break;
case 'f': sReturn.append ("1111 "); break;
}
}
return sReturn;
}
int main() {
ifstream file;
file.open("MachineCode.txt");
if (!file.is_open())
{
cout << "ERROR";
} else {
stringstream strStream;
strStream << file.rdbuf();
string contents = strStream.str();
cout << hex(contents) << endl;
}
return 0;
字符串十六进制(字符串sHex)
{
字符串sReturn=“”;
对于(int i=0;i cout我添加了一个新的case,用于检测何时有新行从输入添加到输出
case '\n': sReturn.append ("\n"); break;
case':sReturn.append(“\n”);break;
当bytecnt==8
或nibblecnt==16
时,您需要修改hex()
以添加换行符。另一个选项是在hex()
中提供输出,但这违反了分离的实现和接口。(如果您总是使用8字节空格分隔的输入,那么我也喜欢@drescherjm方法)