读写二进制时,怎么将ASCII码大于等于128的char字符转换为16进制输出
2014-08-13 17:31
441 查看
首先,要将char转换成对应的整型大小。比如ASCII码164对应的字符串,二进制形式:1010 0100.
直接使用强制转换成int再输出16进制的话,会得到ffffffa4,这是因为字符串的最高位1的问题。
使用下面的这个函数,就可以得到与ASCII码相同值的int
通过这个方法,可以实现将二进制文件用十六进制输出
效果如图:
直接使用强制转换成int再输出16进制的话,会得到ffffffa4,这是因为字符串的最高位1的问题。
使用下面的这个函数,就可以得到与ASCII码相同值的int
int getInt(char chVar) { //将字符串右移7位,观察结果是否为1 int nVal = chVar>>7; //高位为1 if( -1 == nVal) { char cTemp = chVar&0x7f; //将高位1变为0 nVal = (int)cTemp + 128; } else { nVal = (int)chVar; } return nVal; }
通过这个方法,可以实现将二进制文件用十六进制输出
#include <iostream>
#include <iomanip>
#include <fstream>
using namespace std;
int getInt(char chVar) { //将字符串右移7位,观察结果是否为1 int nVal = chVar>>7; //高位为1 if( -1 == nVal) { char cTemp = chVar&0x7f; //将高位1变为0 nVal = (int)cTemp + 128; } else { nVal = (int)chVar; } return nVal; }
int main()
{
ifstream inFile; //文件输入流对象
string strFilename;
cout<<"input the file name : ";
cin>>strFilename;
cout<<strFilename<<endl;
inFile.open(strFilename.c_str(),ios::binary|ios::in); //将文件输入流绑定文件
//判断文件是否打开成功
if (!inFile)
{
cerr<<"文件打开失败"<<endl;
}
//获得文件大小,总字节数
inFile.seekg(0,ios::end);
long int nFileLength = inFile.tellg();
inFile.seekg(0,ios::beg);
long int pos = inFile.tellg();
cout<<nFileLength<<"字节"<<endl;
int nCount = 0;
while(pos <nFileLength)
{
char ch;
inFile.read(&ch,sizeof(char));
int nTemp = getInt(ch);
if(nCount%16 == 0)
{
cout<<setw(8)<<setfill('0')<<setiosflags(ios::uppercase)<<hex<<nCount<<" "; //输出16进
制的地址
}
cout<<setw(2)<<setiosflags(ios::uppercase)<<hex<<nTemp<<" ";
if(nCount%16 == 15)
{
cout<<endl;
}
++nCount;
pos = inFile.tellg();
}
cout<<endl;
return 0;
}
效果如图:
相关文章推荐
- 让VC控制台窗口输出ASCII码大于128的字符
- C语言unsigned char与char之间的转换及英文字符ASCII码和汉字内码输出
- 字符转换(2,8,10,16进制,ASCII码)
- 不能将参数 1 从“char [128]”转换为“LPCTSTR”vs2012 宽字符 转换为多字节的设置
- CString与Char*的转换,以及中文字符写入文件,文件的读写等
- JS中字符问题(二进制/十进制/十六进制及ASCII码之间的转换)
- 将16进制的"49206C6F766520796F7521"(每两位表示一个数)转换成字符输出。
- JS中字符问题(二进制/十进制/十六进制及ASCII码之间的转换)
- MFC中如何将16进制字符转化成10进制,包括CString与char*的转换
- MINA源码学习---mina怎么把字符转换为16进制的
- JS中字符问题(二进制/十进制/十六进制及ASCII码之间的转换)
- 字符转换(2,8,10,16进制,ASCII码)
- JS中字符问题(二进制/十进制/十六进制及ASCII码之间的转换)
- 字符转换(2,8,10,16进制,ASCII码)
- 记录log中的16进制和ASCII码字符输出
- 字符转换(2,8,10,16进制,ASCII码)
- 字符转换(2,8,10,16进制,ASCII码)
- JS中字符问题(二进制/十进制/十六进制及ASCII码之间的转换)
- JS中字符问题(二进制/十进制/十六进制及ASCII码之间的转换)
- linux中的xxd命令可以实现二进制文件到16进制字符的转换