如何把一个文件的内容以十六进制的形式输出?

nostopping 2008-11-02 05:43:51
如何把一个文件读出来,并以十六进制的形式输出?(文件中可能包含中文)
...全文
666 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lann64 2008-11-06
  • 打赏
  • 举报
回复
你这不是十六进制输出,是输出十六进制格式的字符串。
nostopping 2008-11-06
  • 打赏
  • 举报
回复
好了,我的问题解决了.
我先用二进制的方式把文件打开,每次从文件里读一个DWORD,再用sprintf(str,"0x%08",DWORD变量)将读到的数据转换成十六进制,OK,之后随便对这些数据怎么操作(比如将这些数据保存到另一个文件),呵呵.
还是要谢谢楼上的各位高手们.
jia_xiaoxin 2008-11-05
  • 打赏
  • 举报
回复
你可以试试这个

#include <fstream>
#include <iostream>
using namespace std;


int main(int argc, char* argv[])
{
ifstream fin("C:\\test.txt");
if(fin.is_open())
{
fin.clear();
}

int index = 0;
char ch;

//cout << hex;
while(fin.get(ch))
{
if(ch != '\n')
{
index %= 4;
if(index == 0)
{
cout << '\n';
cout << "0x";
}
index ++;
unsigned char cu = ch;
char hc = cu % 0x10 + '0'; if(hc > '9') hc += ('A' - '9' - 1);
char lc = cu / 0x10 + '0'; if(lc > '9') lc += ('A' - '9' - 1);
cout << hc << lc;
}
}
cout << endl;
return 0;
}
树先生 2008-11-05
  • 打赏
  • 举报
回复
文件在计算机中本来就是以二进制存储的
nostopping 2008-11-04
  • 打赏
  • 举报
回复
我想让读出来的数据全部都以8位十六进制的形式输出(如0xff892212),
是不是要以二进制的方式打开文件,读出来数据后再转换成十六进制?
Crazy_hand 2008-11-03
  • 打赏
  • 举报
回复

#include<stdio.h>
#include <stdlib.h>
#include <conio.h>

char *int_char(char *row,int r){/*将行数转换成字符串*/
int i=r,j=0;

i=i/10;
while(i!=0){
j++;
i=i/10;
}

for(i=j+1;i<8;i++)
*(row+i)=' ';/*保证行显示占8格*/
*(row+i)='\0';
for(i=j;i>=0;i--){
*(row+i)=r%10+48;
r/=10;
}
return row;
}

int main(){
FILE *fin,*fout;
char filename[50],ch1,ch2,row[10];
int i=0,r=1;/*r代表行数*/

printf("请输入\(路径\)文件名:");
scanf("%s",filename);

if((fin=fopen(filename,"rb"))==0){
printf("文件打开错误!可能文件不存在!\n");
getch();
exit(0);
}

fout=fopen("查看文件的16进制代码.txt","w");
ch1=fgetc(fin);/*取得一个字符,即8bit*/

while(!feof(fin))
{
if(i==0){
fputs(int_char(row,r),fout);
r++;
}
/////////////////////////////////////////////////////////////////////////////////////////
ch2=15;
ch2&=ch1>>4;/*取得ch1的后前位*/
if(ch2>=0 && ch2<=9)
fputc(ch2+48,fout);/*输出*/
else
fputc(ch2+55,fout);
/////核心代码
ch2=ch1 & 15;/*取得ch1的后4位*/
if(ch2>=0 && ch2<=9)
fputc(ch2+'0',fout);/*输出*/
else
fputc(ch2+55,fout);
///////////////////////////////////////////////////////////////////////////////////////////
i++;
if(i==8){
fputc(' ',fout);
fputc(' ',fout);
}
else if(i==16){
fputc('\n',fout);
i=0;
}///////////////////////////////////////把每一个字符的16进制码分开
else fputc(' ',fout);

ch1=fgetc(fin);
}

fclose(fin);
fclose(fout);

puts("生成文件成功!!!");
}
jia_xiaoxin 2008-11-02
  • 打赏
  • 举报
回复
	string context;
ifstream in("C:\\test.txt",ios::in);
while(in >> context)
{
for(int i = 0; i < context.size(); i++)
{
int data = context[i];
cout << hex << data;
}
}
太乙 2008-11-02
  • 打赏
  • 举报
回复



fscanf(fp,"%x",s);

xhs_lh04 2008-11-02
  • 打赏
  • 举报
回复
按每个字符输出16进制到文件

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧